From fad8281bab57a72bd439af1591ca9534b14cfaab Mon Sep 17 00:00:00 2001 From: Michael Gissing Date: Mon, 21 Oct 2024 16:34:24 +0200 Subject: [PATCH] release 0.6.17 --- CHANGELOG.md | 5 + docker/Dockerfile => Dockerfile | 1 + package-lock.json | 331 +++++++++----------------------- package.json | 8 +- src/server/config.ts | 12 +- src/server/index.ts | 8 +- src/server/setup.ts | 14 +- src/shared/validate.ts | 3 +- src/version.ts | 2 +- 9 files changed, 135 insertions(+), 249 deletions(-) rename docker/Dockerfile => Dockerfile (85%) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1600f9..463bfe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # DerTunnel Changelog +## 0.6.17 + +- Fix Dockerfile build +- Upgrade deps + ## 0.6.16 - Upgrade deps diff --git a/docker/Dockerfile b/Dockerfile similarity index 85% rename from docker/Dockerfile rename to Dockerfile index 8e1e6e8..a12f87a 100644 --- a/docker/Dockerfile +++ b/Dockerfile @@ -7,4 +7,5 @@ COPY ./dist/dertunnel-server.js . EXPOSE 443/tcp EXPOSE 53/udp +VOLUME [ "/dertunnel/data" ] ENTRYPOINT ["node", "./dertunnel-server.js"] diff --git a/package-lock.json b/package-lock.json index beae74e..ea620c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dertunnel", - "version": "0.6.15", + "version": "0.6.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dertunnel", - "version": "0.6.15", + "version": "0.6.17", "license": "MIT", "dependencies": { "acme-client": "5.4.0", @@ -18,17 +18,17 @@ "lru-cache": "11.0.1", "nanoid": "5.0.7", "prompts": "2.4.2", - "rate-limiter-flexible": "5.0.3" + "rate-limiter-flexible": "5.0.4" }, "devDependencies": { "@types/dns2": "2.0.9", - "@types/express": "4.17.21", + "@types/express": "5.0.0", "@types/jest": "29.5.13", "@types/node": "20.16.13", "@types/prompts": "~2.4.9", "@typescript-eslint/eslint-plugin": "8.10.0", "@typescript-eslint/parser": "8.10.0", - "@yao-pkg/pkg": "5.15.0", + "@yao-pkg/pkg": "5.16.1", "esbuild": "0.24.0", "esbuild-register": "3.6.0", "eslint": "8.57.1", @@ -2353,22 +2353,24 @@ } }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", + "@types/express-serve-static-core": "^5.0.0", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", + "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2453,22 +2455,25 @@ } }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", - "dev": true + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2703,42 +2708,40 @@ "dev": true }, "node_modules/@yao-pkg/pkg": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@yao-pkg/pkg/-/pkg-5.15.0.tgz", - "integrity": "sha512-VKgSO7Djch98NEByNJucpuqVlGre5cyhCHeQ1CfhetMCOrl5X146lJCDNsRyq9vP7KpajPunTgVYvAIbV+Z+8g==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@yao-pkg/pkg/-/pkg-5.16.1.tgz", + "integrity": "sha512-crUlnNFSReFNFuXDc4f3X2ignkFlc9kmEG7Bp/mJMA1jYyqR0lqjZGLgrSDYTYiNsYud8AzgA3RY1DrMdcUZWg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/generator": "7.23.0", - "@babel/parser": "7.23.0", - "@babel/types": "7.23.0", - "@yao-pkg/pkg-fetch": "3.5.13", - "chalk": "^4.1.2", - "fs-extra": "^9.1.0", - "globby": "^11.1.0", + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "@yao-pkg/pkg-fetch": "3.5.16", "into-stream": "^6.0.0", - "minimatch": "9.0.4", "minimist": "^1.2.6", "multistream": "^4.1.0", - "prebuild-install": "7.1.1", + "picocolors": "^1.1.0", + "picomatch": "^4.0.2", + "prebuild-install": "^7.1.1", "resolve": "^1.22.0", - "stream-meter": "^1.0.4" + "stream-meter": "^1.0.4", + "tinyglobby": "^0.2.9" }, "bin": { "pkg": "lib-es5/bin.js" } }, "node_modules/@yao-pkg/pkg-fetch": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@yao-pkg/pkg-fetch/-/pkg-fetch-3.5.13.tgz", - "integrity": "sha512-KFIumJxNZIXoNKxJstSXbqQjdPqsxI4CKUGL/6GntsQ4U9bBAawkpkJh4s4vMUjGmx7otPvstdgYcO/3TerzzQ==", + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@yao-pkg/pkg-fetch/-/pkg-fetch-3.5.16.tgz", + "integrity": "sha512-mCnZvZz0/Ylpk4TGyt34pqWJyBGYJM8c3dPoMRV8Knodv2QhcYS4iXb5kB/JNWkrRtCKukGZIKkMLXZ3TQlzPg==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "fs-extra": "^9.1.0", "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.6", + "picocolors": "^1.1.0", "progress": "^2.0.3", "semver": "^7.3.5", "tar-fs": "^2.1.1", @@ -2748,108 +2751,19 @@ "pkg-fetch": "lib-es5/bin.js" } }, - "node_modules/@yao-pkg/pkg-fetch/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@yao-pkg/pkg-fetch/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@yao-pkg/pkg/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@yao-pkg/pkg-fetch/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@yao-pkg/pkg-fetch/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@yao-pkg/pkg/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@yao-pkg/pkg/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@yao-pkg/pkg/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@yao-pkg/pkg/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -3043,15 +2957,6 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/asn1js": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", @@ -3071,16 +2976,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/atomically": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", @@ -3964,18 +3859,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dns2": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/dns2/-/dns2-2.1.0.tgz", @@ -4811,22 +4694,6 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4989,26 +4856,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -6790,19 +6637,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -7488,20 +7322,12 @@ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "license": "MIT" }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -7846,9 +7672,10 @@ } }, "node_modules/rate-limiter-flexible": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-5.0.3.tgz", - "integrity": "sha512-lWx2y8NBVlTOLPyqs+6y7dxfEpT6YFqKy3MzWbCy95sTTOhOuxufP2QvRyOHpfXpB9OUJPbVLybw3z3AVAS5fA==" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-5.0.4.tgz", + "integrity": "sha512-ftYHrIfSqWYDIJZ4yPTrgOduByAp+86gUS9iklv0JoXVM8eQCAjTnydCj1hAT4MmhmkSw86NaFEJ28m/LC1pKA==", + "license": "ISC" }, "node_modules/raw-body": { "version": "2.5.2", @@ -8612,6 +8439,48 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tinyglobby": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.9.tgz", + "integrity": "sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -8770,16 +8639,6 @@ "dev": true, "license": "MIT" }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index 1af4496..3b37de9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dertunnel", - "version": "0.6.16", + "version": "0.6.17", "description": "A ngrok-style tunnel client/server", "main": "index.js", "scripts": { @@ -29,13 +29,13 @@ "license": "MIT", "devDependencies": { "@types/dns2": "2.0.9", - "@types/express": "4.17.21", + "@types/express": "5.0.0", "@types/jest": "29.5.13", "@types/node": "20.16.13", "@types/prompts": "~2.4.9", "@typescript-eslint/eslint-plugin": "8.10.0", "@typescript-eslint/parser": "8.10.0", - "@yao-pkg/pkg": "5.15.0", + "@yao-pkg/pkg": "5.16.1", "esbuild": "0.24.0", "esbuild-register": "3.6.0", "eslint": "8.57.1", @@ -54,6 +54,6 @@ "lru-cache": "11.0.1", "nanoid": "5.0.7", "prompts": "2.4.2", - "rate-limiter-flexible": "5.0.3" + "rate-limiter-flexible": "5.0.4" } } diff --git a/src/server/config.ts b/src/server/config.ts index 12e8ea5..23f836a 100644 --- a/src/server/config.ts +++ b/src/server/config.ts @@ -1,4 +1,6 @@ +import { existsSync } from "fs"; import fs from "fs/promises"; + import { hashToken } from "../shared/hash"; import { assertArray, assertBool, assertHostname, assertNumber, assertString, assertUserName } from "../shared/validate"; @@ -138,4 +140,12 @@ export async function saveClientConfig(config: TunnelClientsConfig, configFile?: await fs.rename(configFile, oldFile); await fs.rename(tmpFile, configFile); await fs.unlink(oldFile); -} \ No newline at end of file +} + +export async function createClientConfigIfNotExists(config: TunnelClientsConfig, configFile?: string): Promise { + configFile ??= lastClientConfigFileName ?? DefaultClientConfigFileName; + if (!existsSync(configFile)) { + const text = JSON.stringify(config, undefined, 2); + await fs.writeFile(configFile, text); + } +} diff --git a/src/server/index.ts b/src/server/index.ts index 3da3220..01597fa 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -2,7 +2,10 @@ import chalk from "chalk"; import { program } from "commander"; import { Version } from "../version"; -import { isServerConfigAvailable, loadClientConfig, loadConfig, saveConfig } from "./config"; +import { + createClientConfigIfNotExists, isServerConfigAvailable, + loadClientConfig, loadConfig, saveClientConfig, saveConfig +} from "./config"; import { startDnsServer } from "./dns-server"; import { startTunnelServer } from "./server"; import { performInitialSetup, resetAdminTokenAndPrint } from "./setup"; @@ -29,8 +32,11 @@ const log = console.log; // initial setup only if (cmdOpts.setup) { + // ask for server config const conf = await performInitialSetup(); await saveConfig(conf, cmdOpts.serverconfig); + // init client config file if necessary + await createClientConfigIfNotExists({ clients: [] }, cmdOpts.clientconfig); process.exit(0); } diff --git a/src/server/setup.ts b/src/server/setup.ts index 2899b18..fdeb274 100644 --- a/src/server/setup.ts +++ b/src/server/setup.ts @@ -24,9 +24,9 @@ export async function performInitialSetup(): Promise { validate: v => HostnameValidator.test(v) }, { name: "port", - type: "number", + type: "text", message: "TLS server listening port", - initial: 443, + initial: "443", validate: isPortNumber }, { name: "enableLogging", @@ -40,9 +40,9 @@ export async function performInitialSetup(): Promise { initial: true }, { name: "dnsPort", - type: (_, values) => values.enableDns ? "number" : false, + type: (_, values) => values.enableDns ? "text" : false, message: "DNS server listening port", - initial: 53, + initial: "53", validate: isPortNumber }, { name: "dnsTargetHost", @@ -62,9 +62,13 @@ export async function performInitialSetup(): Promise { name: "acmeCertDir", type: (_, values) => values.enableAcme && values.enableDns ? "text" : false, message: "Local directory for caching ACME certificates (must be writable)", - initial: "./cert-data" + initial: "./data" }], { onCancel: () => { cancelled = true; return false } }) as TunnelServiceConfig; + // HAXX prompts "nunber" type bug - no initial value + conf.dnsPort = Number.parseInt(conf.dnsPort as unknown as string); + conf.port = Number.parseInt(conf.port as unknown as string); + if (cancelled) { throw new Error("Setup aborted by user"); } diff --git a/src/shared/validate.ts b/src/shared/validate.ts index 61d7ffa..eb86d53 100644 --- a/src/shared/validate.ts +++ b/src/shared/validate.ts @@ -1,7 +1,8 @@ export const HostnameValidator = /^(([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])$/i; export const EndpointValidator = /^[a-z0-9][a-z0-9-]*[a-z0-9]$/i; -export const isPortNumber = function (v: unknown) { return typeof v === "number" && v > 0 && v < 0x10000 } +export const isPortNumber = function (v: unknown) { console.log("#PORT", v); return (typeof v === "number" && v > 0 && v < 0x10000) || + typeof v === "string" && Number.parseInt(v) > 0 && Number.parseInt(v) < 0x10000 }; export function assertHostname(value: unknown, label: string): void { if (typeof (value) !== "string" || !HostnameValidator.test(value)) { diff --git a/src/version.ts b/src/version.ts index 30c2272..36e46be 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,2 +1,2 @@ // TODO get version from package json or git -export const Version = "0.6.16"; +export const Version = "0.6.17";