version 3.0.4

Massimo Melina committed Feb 23, 2026 at 22:11 UTC f33320b55ecee22ade27b31b33829ff0455ef90a
4 files changed +82 -85
README.md
+2 -2
@@ -100,8 +100,8 @@ To uninstall, remove the files you unzipped and the configuration/data directory
100
101 If you can't or don't want to run our binary versions, you can try this:
102
103 - 1. [install node.js](https://nodejs.org) version 20 (or greater, but then compatibility is not guaranteed)
104 -2. run at the command line `npx hfs@latest`
103 +1. [Install Node.js](https://nodejs.org) version 18 to 24
104 +2. Run at the command line `npx hfs@latest`
105
106 The `@latest` part is optional, and ensures that you are always up to date.
107
package-lock.json
+78 -81
@@ -1,12 +1,12 @@
1 {
2 "name": "hfs",
3 - "version": "3.0.3",
3 + "version": "3.0.4",
4 "lockfileVersion": 2,
5 "requires": true,
6 "packages": {
7 "": {
8 "name": "hfs",
9 - "version": "3.0.3",
9 + "version": "3.0.4",
10 "license": "GPL-3.0",
11 "workspaces": [
12 "admin",
@@ -16,7 +16,7 @@
16 ],
17 "dependencies": {
18 "@gregoranders/csv": "^0.0.13",
19 - "@rejetto/kvstorage": "^0.14.1",
19 + "@rejetto/kvstorage": "^0.15.4",
20 "acme-client": "^5.4.0",
21 "busboy": "^1.6.0",
22 "crc-32": "^1.2.2",
@@ -3080,9 +3080,9 @@
3080 }
3081 },
3082 "node_modules/@rejetto/kvstorage": {
3083 - "version": "0.14.1",
3084 - "resolved": "https://registry.npmjs.org/@rejetto/kvstorage/-/kvstorage-0.14.1.tgz",
3085 - "integrity": "sha512-8mgq4/KS9ogXI4s+tRH8sTMcLIEs0MFxHCMRR5/HHnhN6JGrCy5KsopMs396BCY0nxWai76yKMo2V/AIjG7XOQ==",
3083 + "version": "0.15.4",
3084 + "resolved": "https://registry.npmjs.org/@rejetto/kvstorage/-/kvstorage-0.15.4.tgz",
3085 + "integrity": "sha512-BWEb7zVw1wGbrEAo5UTN3licBiKjHDSJuwOkIn1TYqYdJRO/OOzwzwtzvvaitXjFhmq8SnvGdZO6SbS8F9oy8Q==",
3086 "license": "MIT"
3087 },
3088 "node_modules/@remix-run/router": {
@@ -4492,10 +4492,14 @@
4492 }
4493 },
4494 "node_modules/balanced-match": {
4495 - "version": "1.0.2",
4496 - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
4497 - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
4498 - "dev": true
4495 + "version": "4.0.4",
4496 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
4497 + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
4498 + "dev": true,
4499 + "license": "MIT",
4500 + "engines": {
4501 + "node": "18 || 20 || >=22"
4502 + }
4503 },
4504 "node_modules/bare-events": {
4505 "version": "2.8.2",
@@ -4666,14 +4670,16 @@
4670 "dev": true
4671 },
4672 "node_modules/brace-expansion": {
4669 - "version": "1.1.12",
4670 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
4671 - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
4673 + "version": "5.0.3",
4674 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
4675 + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
4676 "dev": true,
4677 "license": "MIT",
4678 "dependencies": {
4675 - "balanced-match": "^1.0.0",
4676 - "concat-map": "0.0.1"
4679 + "balanced-match": "^4.0.2"
4680 + },
4681 + "engines": {
4682 + "node": "18 || 20 || >=22"
4683 }
4684 },
4685 "node_modules/braces": {
@@ -5018,12 +5024,6 @@
5024 "node": ">= 0.6"
5025 }
5026 },
5021 - "node_modules/concat-map": {
5022 - "version": "0.0.1",
5023 - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
5024 - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
5025 - "dev": true
5026 - },
5027 "node_modules/content-disposition": {
5028 "version": "0.5.4",
5029 "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -5658,9 +5658,9 @@
5658 }
5659 },
5660 "node_modules/fast-xml-parser": {
5661 - "version": "5.3.4",
5662 - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.4.tgz",
5663 - "integrity": "sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==",
5661 + "version": "5.3.7",
5662 + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.7.tgz",
5663 + "integrity": "sha512-JzVLro9NQv92pOM/jTCR6mHlJh2FGwtomH8ZQjhFj/R29P2Fnj38OgPJVtcvYw6SuKClhgYuwUZf5b3rd8u2mA==",
5664 "funding": [
5665 {
5666 "type": "github",
@@ -5669,7 +5669,7 @@
5669 ],
5670 "license": "MIT",
5671 "dependencies": {
5672 - "strnum": "^2.1.0"
5672 + "strnum": "^2.1.2"
5673 },
5674 "bin": {
5675 "fxparser": "src/cli/cli.js"
@@ -6797,6 +6797,22 @@
6797 "node": ">=4"
6798 }
6799 },
6800 + "node_modules/minimatch": {
6801 + "version": "10.2.2",
6802 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz",
6803 + "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==",
6804 + "dev": true,
6805 + "license": "BlueOak-1.0.0",
6806 + "dependencies": {
6807 + "brace-expansion": "^5.0.2"
6808 + },
6809 + "engines": {
6810 + "node": "18 || 20 || >=22"
6811 + },
6812 + "funding": {
6813 + "url": "https://github.com/sponsors/isaacs"
6814 + }
6815 + },
6816 "node_modules/minimist": {
6817 "version": "1.2.8",
6818 "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
@@ -7034,16 +7050,16 @@
7050 "license": "MIT"
7051 },
7052 "node_modules/nodemon": {
7037 - "version": "3.1.10",
7038 - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz",
7039 - "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==",
7053 + "version": "3.1.14",
7054 + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.14.tgz",
7055 + "integrity": "sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw==",
7056 "dev": true,
7057 "license": "MIT",
7058 "dependencies": {
7059 "chokidar": "^3.5.2",
7060 "debug": "^4",
7061 "ignore-by-default": "^1.0.1",
7046 - "minimatch": "^3.1.2",
7062 + "minimatch": "^10.2.1",
7063 "pstree.remy": "^1.1.8",
7064 "semver": "^7.5.3",
7065 "simple-update-notifier": "^2.0.0",
@@ -7071,18 +7087,6 @@
7087 "node": ">=4"
7088 }
7089 },
7074 - "node_modules/nodemon/node_modules/minimatch": {
7075 - "version": "3.1.2",
7076 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
7077 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
7078 - "dev": true,
7079 - "dependencies": {
7080 - "brace-expansion": "^1.1.7"
7081 - },
7082 - "engines": {
7083 - "node": "*"
7084 - }
7085 - },
7090 "node_modules/nodemon/node_modules/semver": {
7091 "version": "7.7.1",
7092 "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
@@ -8505,9 +8509,9 @@
8509 "dev": true
8510 },
8511 "node_modules/tar": {
8508 - "version": "7.5.7",
8509 - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz",
8510 - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==",
8512 + "version": "7.5.9",
8513 + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz",
8514 + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==",
8515 "dev": true,
8516 "license": "BlueOak-1.0.0",
8517 "dependencies": {
@@ -11166,9 +11170,9 @@
11170 "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="
11171 },
11172 "@rejetto/kvstorage": {
11169 - "version": "0.14.1",
11170 - "resolved": "https://registry.npmjs.org/@rejetto/kvstorage/-/kvstorage-0.14.1.tgz",
11171 - "integrity": "sha512-8mgq4/KS9ogXI4s+tRH8sTMcLIEs0MFxHCMRR5/HHnhN6JGrCy5KsopMs396BCY0nxWai76yKMo2V/AIjG7XOQ=="
11173 + "version": "0.15.4",
11174 + "resolved": "https://registry.npmjs.org/@rejetto/kvstorage/-/kvstorage-0.15.4.tgz",
11175 + "integrity": "sha512-BWEb7zVw1wGbrEAo5UTN3licBiKjHDSJuwOkIn1TYqYdJRO/OOzwzwtzvvaitXjFhmq8SnvGdZO6SbS8F9oy8Q=="
11176 },
11177 "@remix-run/router": {
11178 "version": "1.23.2",
@@ -12069,9 +12073,9 @@
12073 }
12074 },
12075 "balanced-match": {
12072 - "version": "1.0.2",
12073 - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
12074 - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
12076 + "version": "4.0.4",
12077 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
12078 + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
12079 "dev": true
12080 },
12081 "bare-events": {
@@ -12183,13 +12187,12 @@
12187 "dev": true
12188 },
12189 "brace-expansion": {
12186 - "version": "1.1.12",
12187 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
12188 - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
12190 + "version": "5.0.3",
12191 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
12192 + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
12193 "dev": true,
12194 "requires": {
12191 - "balanced-match": "^1.0.0",
12192 - "concat-map": "0.0.1"
12195 + "balanced-match": "^4.0.2"
12196 }
12197 },
12198 "braces": {
@@ -12398,12 +12401,6 @@
12401 "mime-db": ">= 1.43.0 < 2"
12402 }
12403 },
12401 - "concat-map": {
12402 - "version": "0.0.1",
12403 - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
12404 - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
12405 - "dev": true
12406 - },
12404 "content-disposition": {
12405 "version": "0.5.4",
12406 "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -12853,11 +12850,11 @@
12850 }
12851 },
12852 "fast-xml-parser": {
12856 - "version": "5.3.4",
12857 - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.4.tgz",
12858 - "integrity": "sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==",
12853 + "version": "5.3.7",
12854 + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.7.tgz",
12855 + "integrity": "sha512-JzVLro9NQv92pOM/jTCR6mHlJh2FGwtomH8ZQjhFj/R29P2Fnj38OgPJVtcvYw6SuKClhgYuwUZf5b3rd8u2mA==",
12856 "requires": {
12860 - "strnum": "^2.1.0"
12857 + "strnum": "^2.1.2"
12858 }
12859 },
12860 "fastq": {
@@ -13636,6 +13633,15 @@
13633 "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
13634 "dev": true
13635 },
13636 + "minimatch": {
13637 + "version": "10.2.2",
13638 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz",
13639 + "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==",
13640 + "dev": true,
13641 + "requires": {
13642 + "brace-expansion": "^5.0.2"
13643 + }
13644 + },
13645 "minimist": {
13646 "version": "1.2.8",
13647 "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
@@ -13795,15 +13801,15 @@
13801 "dev": true
13802 },
13803 "nodemon": {
13798 - "version": "3.1.10",
13799 - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz",
13800 - "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==",
13804 + "version": "3.1.14",
13805 + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.14.tgz",
13806 + "integrity": "sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw==",
13807 "dev": true,
13808 "requires": {
13809 "chokidar": "^3.5.2",
13810 "debug": "^4",
13811 "ignore-by-default": "^1.0.1",
13806 - "minimatch": "^3.1.2",
13812 + "minimatch": "^10.2.1",
13813 "pstree.remy": "^1.1.8",
13814 "semver": "^7.5.3",
13815 "simple-update-notifier": "^2.0.0",
@@ -13818,15 +13824,6 @@
13824 "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
13825 "dev": true
13826 },
13821 - "minimatch": {
13822 - "version": "3.1.2",
13823 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
13824 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
13825 - "dev": true,
13826 - "requires": {
13827 - "brace-expansion": "^1.1.7"
13828 - }
13829 - },
13827 "semver": {
13828 "version": "7.7.1",
13829 "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
@@ -14827,9 +14824,9 @@
14824 "dev": true
14825 },
14826 "tar": {
14830 - "version": "7.5.7",
14831 - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz",
14832 - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==",
14827 + "version": "7.5.9",
14828 + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz",
14829 + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==",
14830 "dev": true,
14831 "requires": {
14832 "@isaacs/fs-minipass": "^4.0.0",
package.json
+1 -1
@@ -1,6 +1,6 @@
1 {
2 "name": "hfs",
3 - "version": "3.0.3",
3 + "version": "3.0.4",
4 "description": "HTTP File Server",
5 "keywords": ["file server", "http server"],
6 "homepage": "https://rejetto.com/hfs",
tests/config.yaml
+1 -1
@@ -178,7 +178,7 @@ accounts:
178 admins:
179 allow_net: ::1
180 admin: true
181 -version: 3.0.3
181 +version: 3.0.4
182 max_downloads_per_account: 2
183 max_downloads: 1
184 roots: