From 5c06ae1edb5c7265a2061b332e71478d501cb22b Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Wed, 18 Sep 2024 19:28:28 +0200 Subject: [PATCH] feat(smartdns): Add DNS Server and DNSSEC tools with comprehensive unit tests --- changelog.md | 95 ++++ package.json | 17 +- pnpm-lock.yaml | 878 +++++++++++++++++++++------------ test/test.server.ts | 163 ++++++ ts_client/classes.dnsclient.ts | 6 +- ts_client/dnsly.plugins.ts | 4 - ts_server/classes.dnsserver.ts | 163 +++--- ts_server/classes.dnstools.ts | 83 ++++ ts_server/index.ts | 1 + ts_server/plugins.ts | 17 +- 10 files changed, 1038 insertions(+), 389 deletions(-) create mode 100644 changelog.md create mode 100644 ts_server/classes.dnstools.ts diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..b960145 --- /dev/null +++ b/changelog.md @@ -0,0 +1,95 @@ +# Changelog + +## 2024-09-18 - 6.1.0 - feat(smartdns) +Add DNS Server and DNSSEC tools with comprehensive unit tests + +- Updated package dependencies to the latest versions +- Introduced DnsServer class for handling DNS requests over both HTTPS and UDP with support for custom handlers +- Added DnsSec class for generating and managing DNSSEC keys and DS records +- Implemented unit tests for DnsServer and Smartdns classes + +## 2024-06-02 - 6.0.0 - server/client +Main description here + +- **Breaking Change:** Move from client only to server + client exports. + +## 2024-03-30 - 5.0.4 - maintenance +Range contains relevant changes + +- Switch to new org scheme + +## 2023-04-08 - 5.0.4 - core +Main description here + +- Core update +- Fixes applied to the system + +## 2022-07-27 - 5.0.0 - core +Update contains relevant changes + +- **Breaking Change:** Major update and core changes +- Fixes and updates applied + +## 2022-07-27 - 4.0.11 - core +Range contains relevant changes + +- **Breaking Change:** Core update and changes applied + +## 2021-08-24 - 4.0.10 - core +Range contains relevant changes + +- Fixes applied to the core functionalities + +## 2021-01-23 - 4.0.8 - core +Range contains relevant changes + +- Updates and fixes to the core components + +## 2020-08-05 - 4.0.4 - core +Range contains relevant changes + +- Multiple core fixes applied + +## 2020-02-15 - 4.0.0 - core +Main description here + +- Core updates +- Fixes applied across the system + +## 2020-02-15 - 3.0.8 - core +Core updates with major changes + +- **Breaking Change:** Now uses Google DNS HTTPS API and handles DNSSEC validation + +## 2019-01-07 - 3.0.6 - core +Range contains relevant changes + +- Fixes and updates applied to the core + +## 2018-05-13 - 3.0.4 - core +Range contains relevant changes + +- Fixes applied, including `fix .checkUntilAvailable` error + +## 2018-05-13 - 3.0.0 - ci +Main description here + +- CI changes and updates to the access level and global packages + +## 2017-07-31 - 2.0.10 - package +Update to new package name and improved record retrieval + +- **Breaking Change:** Package name update and record retrieval improvements + +## 2017-01-27 - 2.0.1 - maintenance +Multiple fixes and merges + +## 2017-01-27 - 2.0.0 - core +Fix typings and update to better API + +## 2016-11-15 - 1.0.7 - initial +Initial setup and improvements + +- Initial deployment +- README improvements + diff --git a/package.json b/package.json index 580ca50..bcac636 100644 --- a/package.json +++ b/package.json @@ -36,18 +36,21 @@ "dependencies": { "@push.rocks/smartdelay": "^3.0.1", "@push.rocks/smartenv": "^5.0.5", - "@push.rocks/smartpromise": "^4.0.2", + "@push.rocks/smartpromise": "^4.0.4", "@push.rocks/smartrequest": "^2.0.15", - "@tsclass/tsclass": "^4.0.54", + "@tsclass/tsclass": "^4.1.2", "@types/dns-packet": "^5.6.5", - "dns-packet": "^5.6.1" + "@types/elliptic": "^6.4.18", + "dns-packet": "^5.6.1", + "elliptic": "^6.5.7", + "minimatch": "^10.0.1" }, "devDependencies": { - "@git.zone/tsbuild": "^2.1.66", - "@git.zone/tsrun": "^1.2.44", + "@git.zone/tsbuild": "^2.1.84", + "@git.zone/tsrun": "^1.2.49", "@git.zone/tstest": "^1.0.77", - "@push.rocks/tapbundle": "^5.0.8", - "@types/node": "^20.13.0" + "@push.rocks/tapbundle": "^5.2.0", + "@types/node": "^22.5.5" }, "files": [ "ts/**/*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45648cc..6aa79bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,39 +15,51 @@ importers: specifier: ^5.0.5 version: 5.0.12 '@push.rocks/smartpromise': - specifier: ^4.0.2 - version: 4.0.3 + specifier: ^4.0.4 + version: 4.0.4 '@push.rocks/smartrequest': specifier: ^2.0.15 version: 2.0.22 '@tsclass/tsclass': - specifier: ^4.0.54 - version: 4.0.54 + specifier: ^4.1.2 + version: 4.1.2 '@types/dns-packet': specifier: ^5.6.5 version: 5.6.5 + '@types/elliptic': + specifier: ^6.4.18 + version: 6.4.18 dns-packet: specifier: ^5.6.1 version: 5.6.1 + elliptic: + specifier: ^6.5.7 + version: 6.5.7 + minimatch: + specifier: ^10.0.1 + version: 10.0.1 devDependencies: '@git.zone/tsbuild': - specifier: ^2.1.66 - version: 2.1.80 + specifier: ^2.1.84 + version: 2.1.84 '@git.zone/tsrun': - specifier: ^1.2.44 - version: 1.2.46(@types/node@20.13.0) + specifier: ^1.2.49 + version: 1.2.49(@types/node@22.5.5) '@git.zone/tstest': specifier: ^1.0.77 - version: 1.0.90(@types/node@20.13.0) + version: 1.0.90(@types/node@22.5.5) '@push.rocks/tapbundle': - specifier: ^5.0.8 - version: 5.0.23 + specifier: ^5.2.0 + version: 5.2.0 '@types/node': - specifier: ^20.13.0 - version: 20.13.0 + specifier: ^22.5.5 + version: 22.5.5 packages: + '@api.global/typedrequest-interfaces@2.0.2': + resolution: {integrity: sha512-D+mkr4IiUZ/eUgrdp5jXjBKOW/iuMcl0z2ZLQsLLypKX/psFGD3viZJ58FNRa+/1OSM38JS5wFyoWl8oPEFLrw==} + '@api.global/typedrequest-interfaces@3.0.19': resolution: {integrity: sha512-uuHUXJeOy/inWSDrwD0Cwax2rovpxYllDhM2RWh+6mVpQuNmZ3uw6IVg6dA2G1rOe24Ebs+Y9SzEogo+jYN7vw==} @@ -63,16 +75,16 @@ packages: '@apiglobal/typedrequest-interfaces@2.0.1': resolution: {integrity: sha512-Oi7pNU4vKo5UvcCJmqkH43Us237Ws/Pp/WDYnwnonRnTmIMd+6QjNfN/gXcPnP6tbamk8r8Xzcz9mgnSDM2ysw==} - '@babel/code-frame@7.24.6': - resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.6': - resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.6': - resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} '@babel/runtime@7.23.4': @@ -237,22 +249,25 @@ packages: '@esm-bundle/chai@4.3.4-fix.0': resolution: {integrity: sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw==} - '@git.zone/tsbuild@2.1.80': - resolution: {integrity: sha512-jAChzcBFhzDKN32TzZv94l0/zegMoJnq9fvdiWV0lysRAHUjQttgwY0dFndGy3VUdlO27r0VgkNZOjiU1eB0Jg==} + '@git.zone/tsbuild@2.1.84': + resolution: {integrity: sha512-OR7c06zfsOnqn693ITJnk9B6Yrei/Qa+0c6vp3ixHRGqh1VYUdI5GOIESC4uk8j4R5komR+uou9Jq8IWYkdjIw==} hasBin: true '@git.zone/tsbundle@2.0.15': resolution: {integrity: sha512-ZrPkScaBQ7hHx6BUchRFfPB9tvb7RlNXwjk9qjkp6AcBcF38JgLcu/UDKDqRsuaFJpkK9oclyhA5bDA7SjXWZg==} hasBin: true - '@git.zone/tsrun@1.2.46': - resolution: {integrity: sha512-8miFVBle9Mnjx+uPGI/P+EuWcIOXWjBAkdjN5IYbdp5Ytt4xQODCLh4JSnC9h56UeU1nUxCAxZeJs2e9TXrivA==} + '@git.zone/tsrun@1.2.49': + resolution: {integrity: sha512-RnUDdny6jAuuBLx7HqUE38JsHx9nnUUYkDM5vAOREoc6oCI9XVM0QeqIdwFmDz6eeDLBH1+yqjSQPoW5UvflJA==} hasBin: true '@git.zone/tstest@1.0.90': resolution: {integrity: sha512-McytXK46GiReEps7wHWW6zOHYCFF4sywjj6auHjhGqzOogA2Wju1YtZRL+o+OAUb61kQxNFRras6Xg/4Zth0Bw==} hasBin: true + '@hapi/bourne@3.0.0': + resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} + '@happy-dom/global-registrator@8.9.0': resolution: {integrity: sha512-Kw/YMNv1kmH862kQUzXM6K0Y4AW5b0I/+2EIopVc7edurBwY8LHSKd5gJzEEQvdgapSeDJowhOCgL0tkhJWi4A==} @@ -264,8 +279,8 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -276,6 +291,9 @@ packages: '@lit-labs/ssr-dom-shim@1.2.0': resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} + '@lit-labs/ssr-dom-shim@1.2.1': + resolution: {integrity: sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==} + '@lit/reactive-element@1.6.3': resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} @@ -352,6 +370,9 @@ packages: '@push.rocks/smartcli@4.0.11': resolution: {integrity: sha512-KDWfUqWBoUZsOEtsDx36d6qc8GG7Zo5E+HHamYY68KVDO8BMu6jbBucoUUPDksczLEmbXKLmroBP1mn/xozQOA==} + '@push.rocks/smartcrypto@2.0.4': + resolution: {integrity: sha512-1+/5bsjyataf5uUkUNnnVXGRAt+gHVk1KDzozjTqgqJxHvQk1d9fVDohL6CxUhUucTPtu5VR5xNBiV8YCDuGyw==} + '@push.rocks/smartdelay@3.0.5': resolution: {integrity: sha512-mUuI7kj2f7ztjpic96FvRIlf2RsKBa5arw81AHNsndbxO6asRcxuWL8dTVxouEIK8YsBUlj0AsrCkHhMbLQdHw==} @@ -361,8 +382,8 @@ packages: '@push.rocks/smartexit@1.0.23': resolution: {integrity: sha512-WmwKYcwbHBByoABhHHB+PAjr5475AtD/xBh1mDcqPrFsOOUOZq3BBUdpq25wI3ccu/SZB5IwaimiVzadls6HkA==} - '@push.rocks/smartexpect@1.0.21': - resolution: {integrity: sha512-SelJxXMYeF5VEZk0oPgcjTCM2D7vqOTUgVX/vnnGxZAl9d068LD12/BWLwKCEp0dsV3NT8rBuXJTFPZYjdsApg==} + '@push.rocks/smartexpect@1.2.1': + resolution: {integrity: sha512-R3dvdmGTjFNDFDRsMqy5KPRm8AvQU3hDYjRAOsUqAigqLW6d4WTiUun33+K2iErbdowg6++o5N7oENC5q/Wd3Q==} '@push.rocks/smartfeed@1.0.11': resolution: {integrity: sha512-02uhXxQamgfBo3T12FsAdfyElnpoWuDUb08B2AE60DbIaukVx/7Mi17xwobApY1flNSr5StZDt8N8vxPhBhIXw==} @@ -370,12 +391,12 @@ packages: '@push.rocks/smartfile-interfaces@1.0.7': resolution: {integrity: sha512-MeOl/200UOvSO4Pgq/DVFiBVZpL9gjOBQM+4XYNjSxda8c6VBvchHAntaFLQUlO8U1ckNaP9i+nMO4O4/0ymyw==} - '@push.rocks/smartfile@10.0.41': - resolution: {integrity: sha512-xOOy0duI34M2qrJZggpk51EHGXmg9+mBL1Q55tNiQKXzfx89P3coY1EAZG8tvmep3qB712QEKe7T+u04t42Kjg==} - '@push.rocks/smartfile@11.0.16': resolution: {integrity: sha512-tl0IJj1mWqNUkqZLjlFKR0OEixhX8cafws7WcxuhNZymkK9axo03O9DiFbUZb4XUbcfYaYNWGTqHUyppWpwRHQ==} + '@push.rocks/smartfile@11.0.21': + resolution: {integrity: sha512-ZtF8QPGeR/2MJxtHgJY1+FLrOZ+GTLWqwyDz7Woq1x+K9nb4almA1OpdW5IQPBK3ECHur0ghg5bzzKMuR5ZSzg==} + '@push.rocks/smartguard@3.0.2': resolution: {integrity: sha512-9TuYPSRxNj0DS84d5ZvSARXRehVCqVq7nC85o/p58kb3aeRtY0A6Hz9dtSdFjEvprEBCqEEzdmiFlNsNYBpwbQ==} @@ -394,9 +415,15 @@ packages: '@push.rocks/smartlog-interfaces@3.0.0': resolution: {integrity: sha512-dfRqiSolGQwaF9gWmkixWOoXZxcWBjK3u6A1CpcfhCbVr2VSUMIrZ5t74/DgdfedsTrhDqoD0NGezsMXF2pFHQ==} + '@push.rocks/smartlog-interfaces@3.0.2': + resolution: {integrity: sha512-8hGRTJehbsFSJxLhCQkA018mZtXVPxPTblbg9VaE/EqISRzUw+eosJ2EJV7M4Qu0eiTJZjnWnNLn8CkD77ziWw==} + '@push.rocks/smartlog@3.0.6': resolution: {integrity: sha512-HvZtgur6PY+n6skw5Jx+KWwHciCiWNm+WNLkqRreuLXJrWKknwYvy/Ea+f61RqJBHEkOYTYxRoddBuC+6HAoWw==} + '@push.rocks/smartlog@3.0.7': + resolution: {integrity: sha512-WHOw0iHHjCEbYY4KGX40iFtLI11QJvvWIbC9yFn3Mt+nrdupMnry7Ztc5v/PqO8lu33Q6xDBMXiNQ9yNY0HVGw==} + '@push.rocks/smartmanifest@2.0.2': resolution: {integrity: sha512-QGc5C9vunjfUbYsPGz5bynV/mVmPHkrQDkWp8ZO8VJtK1GZe+njgbrNyxn2SUHR0IhSAbSXl1j4JvBqYf5eTVg==} @@ -406,9 +433,6 @@ packages: '@push.rocks/smartmatch@2.0.0': resolution: {integrity: sha512-MBzP++1yNIBeox71X6VxpIgZ8m4bXnJpZJ4nWVH6IWpmO38MXTu4X0QF8tQnyT4LFcwvc9iiWaD15cstHa7Mmw==} - '@push.rocks/smartmime@1.0.6': - resolution: {integrity: sha512-PHd+I4UcsnOATNg8wjDsSAmmJ4CwQFrQCNzd0HSJMs4ZpiK3Ya91almd6GLpDPU370U4HFh4FaPF4eEAI6vkJQ==} - '@push.rocks/smartmime@2.0.2': resolution: {integrity: sha512-aXH1sFD73q9cEwPdeSeN7Zxd2aoVt9wE97ILFCW5gORylvm85Hgfq7SYkqykjQzEL8IDJKJF3G78+xcL2rALTg==} @@ -430,8 +454,8 @@ packages: '@push.rocks/smartpdf@3.1.6': resolution: {integrity: sha512-mnmqAKykgO10sF4hltQGhES9yoO7H5hoRKvqynPF5JsAK/YpdpdbAdn/KIKvlxoZD150LoCsj+RF3dqCucNoAA==} - '@push.rocks/smartpromise@4.0.3': - resolution: {integrity: sha512-z3lIso4/6KK3c6NFTVGZ7AOBsGURf8ha3qQtX/OxjZFk5dqS//8PLd0XqghVdIaUlRGmJ7Sfds/efZERWn1tAg==} + '@push.rocks/smartpromise@4.0.4': + resolution: {integrity: sha512-Mbh+DnX4+rVPEZgYU7LtTJI/AYoNn7+h27AycEFpPJW41DCfjTiXiI0+ecNdyO1AfbcL0Q02RQjoEauEWx5FQg==} '@push.rocks/smartpuppeteer@2.0.2': resolution: {integrity: sha512-EcYCT0PX++WjfHp7W5UYX3t8x5gSNpJMMUvhA7SHz8b2t76ItslNWxprRcF0CUQyN1fozbf5StZf7dwdGc/dIA==} @@ -448,6 +472,9 @@ packages: '@push.rocks/smartshell@3.0.5': resolution: {integrity: sha512-kHh86kpkrXHM/xgftcFQ2psU+DJrINzbeD1gIKR/I6cEXjWyYfs+I6UnFMhY3Bcpx9FdTElpRy5qVsumWURQSw==} + '@push.rocks/smartshell@3.0.6': + resolution: {integrity: sha512-j3SgNyq1K3i7NVk5a2+5QkG/9ac30eC3OsOAMXVxOczYceMXRiXIr9yow3t/+na14/zSYd8He2N0vYPtYqKeSQ==} + '@push.rocks/smartsitemap@2.0.3': resolution: {integrity: sha512-jIcms8V1b2mt3dS4PKNlLR1DRC8pCDWMRVbnyM/2+snZOJZonQRlQzAyX8No0EfLbfdrfnxv2IjPX13X29Re6g==} @@ -460,18 +487,21 @@ packages: '@push.rocks/smartstate@2.0.17': resolution: {integrity: sha512-ucx0zq8gWL3MuN4ogibUiGJlEH0of9WyDfxu+4pQySEdaZBJw0/UFkBM8wButkj0dF8w4wsVMN4YwZAdVqsAXg==} - '@push.rocks/smartstream@2.0.8': - resolution: {integrity: sha512-GlF/9cCkvBHwKa3DK4DO5wjfSgqkj6gAS4TrY9uD5NMHu9RQv4WiNrElTYj7iCEpnZgUnLO3tzw1JA3NRIMnnA==} - '@push.rocks/smartstream@3.0.38': resolution: {integrity: sha512-Sk9esPURWXldS0ZvgClCtrEyvELjvFnbQgUAelwoXWMfM8pXuB9BX1tE+Z1iBkB9Xyw2p1d9jYelO6waSXg0BQ==} + '@push.rocks/smartstream@3.0.44': + resolution: {integrity: sha512-BZwSUmhVD/CEzRdG/e2UachlyNjshiknqBnwHzIFPIjVKC66UgWX5lYCs2LOwJtuUEpfL1vTMOAYUFNcmPjW9A==} + '@push.rocks/smartstring@4.0.15': resolution: {integrity: sha512-NTNeOjWyg+aHtBTiQEyXamr7oTvYZ3wS1fudHo9ua7CLrykpK+i+RxFyJaLg1zB5x9xQF3NLEQecB14HPFX8Cg==} '@push.rocks/smarttime@4.0.6': resolution: {integrity: sha512-1whOow0YJw/TbN758TedRRxApoZbsvyxCVpoGjXh7DE/fEEgs7RCr4vVF5jYpyXNQuNMLpKJcTsSfyQ6RvH4Aw==} + '@push.rocks/smarttime@4.0.8': + resolution: {integrity: sha512-He+1ebBowVd8rW+VHZMFmz407xVMQf/JbyKr3s1ozoIlJS1AhZpDvlkzyqLV2tNMP1/cEBeo25ImJN2x1pksBA==} + '@push.rocks/smartunique@3.0.9': resolution: {integrity: sha512-q6DYQgT7/dqdWi9HusvtWCjdsFzLFXY9LTtaZV6IYNJt6teZOonoygxTdNt9XLn6niBSbLYrHSKvJNTRH/uK+g==} @@ -484,8 +514,8 @@ packages: '@push.rocks/smartyaml@2.0.5': resolution: {integrity: sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==} - '@push.rocks/tapbundle@5.0.23': - resolution: {integrity: sha512-csiHxdmh5Hwf4FI94gUnPgWG+DjjEt1xffa7eLyBN3++Jvt3aSNeBsQh74YF2n6/f8q7dcb59TMYTksilU8iJg==} + '@push.rocks/tapbundle@5.2.0': + resolution: {integrity: sha512-v2zXZzCYwKpI0zn2/IWzYa+p3UF9gH3TVB/dCKRMpWkIJ5gYLRZVfBZK3YzgjhZwZBOmRYxYYBgkqhoH1X6CTw==} '@push.rocks/taskbuffer@3.1.7': resolution: {integrity: sha512-QktGVJPucqQmW/QNGnscf4FAigT1H7JWKFGFdRuDEaOHKFh9qN+PXG3QY7DtZ4jfXdGLxPN4yAufDuPSAJYFnw==} @@ -613,8 +643,8 @@ packages: '@tsclass/tsclass@3.0.48': resolution: {integrity: sha512-hC65UvDlp9qvsl6OcIZXz0JNiWZ0gyzsTzbXpg215sGxopgbkOLCr6E0s4qCTnweYm95gt2AdY95uP7M7kExaQ==} - '@tsclass/tsclass@4.0.54': - resolution: {integrity: sha512-v+Xc7M0BKNT79/kx7S5Jsc17zj+acUuMDxJtKbQgdU4H8ke3aHAHJr2KicXJeXDTcn41ZEbwJPQ1cc+bjy8bZw==} + '@tsclass/tsclass@4.1.2': + resolution: {integrity: sha512-uMg1IcTU1cP0McXYGwGffoU3asNQHle7bTN0tn6kVXzfNzSwQf4o8v+YQ4VRnUzo4ov6VKcPXqg5OLb2vz977g==} '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -634,6 +664,9 @@ packages: '@types/babel__code-frame@7.0.6': resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} + '@types/bn.js@5.1.6': + resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -643,8 +676,8 @@ packages: '@types/chai-dom@1.11.3': resolution: {integrity: sha512-EUEZI7uID4ewzxnU7DJXtyvykhQuwe+etJ1wwOiJyQRTH/ifMWKX+ghiXkxCUvNJ6IQDodf0JXhuP6zZcy2qXQ==} - '@types/chai@4.3.16': - resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} + '@types/chai@4.3.19': + resolution: {integrity: sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==} '@types/clean-css@4.2.11': resolution: {integrity: sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==} @@ -682,15 +715,15 @@ packages: '@types/dns-packet@5.6.5': resolution: {integrity: sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==} + '@types/elliptic@6.4.18': + resolution: {integrity: sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==} + '@types/express-serve-static-core@4.19.3': resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - '@types/from2@2.3.5': - resolution: {integrity: sha512-giavnjf3kNlJnE+HpZA1CQ3UKHxgehzsTuIMGda8pGMbOiLYGVNADEskey44OZcADHm/HOoBany8IV+0x28XFw==} - '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -757,8 +790,11 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.13.0': - resolution: {integrity: sha512-FM6AOb3khNkNIXPnHFDYaHerSv8uN22C91z098AnGccVu+Pcdhi+pNUFDi0iLmPIsVE0JBD0KVS7mzUYt4nRzQ==} + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@22.5.5': + resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} '@types/parse5@6.0.3': resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} @@ -769,6 +805,9 @@ packages: '@types/qs@6.9.15': resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + '@types/randomatic@3.1.5': resolution: {integrity: sha512-VCwCTw6qh1pRRw+5rNTAwqPmf6A+hdrkdM7dBpZVmhl7g+em3ONXlYK/bWPVKqVGMWgP0d1bog8Vc/X6zRwRRQ==} @@ -848,20 +887,20 @@ packages: resolution: {integrity: sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==} engines: {node: '>=18.0.0'} - '@web/test-runner-core@0.13.2': - resolution: {integrity: sha512-G0D3mv9jvR+5xILENchPP9v1ZjBf3QVlzarMLR5jedCNbgntzcayF0LeW5wh5uyafGZJH28cYm9jGrJvGipoPQ==} + '@web/test-runner-core@0.13.3': + resolution: {integrity: sha512-ilDqF/v2sj0sD69FNSIDT7uw4M1yTVedLBt32/lXy3MMi6suCM7m/ZlhsBy8PXhf879WMvzBOl/vhJBpEMB9vA==} engines: {node: '>=18.0.0'} accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -938,8 +977,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} - axe-core@4.9.1: - resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} bail@2.0.2: @@ -966,6 +1005,9 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + body-parser@1.20.2: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -983,6 +1025,9 @@ packages: broadcast-channel@7.0.0: resolution: {integrity: sha512-a2tW0Ia1pajcPBOGUF2jXlDnvE9d5/dg6BG9h60OmRUcZVr/veUrU8vEQFwwQIhwG3KVzYwSk3v2nRRGFgQDXQ==} + brorand@1.1.0: + resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} + buffer-crc32@0.2.13: resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} @@ -1068,8 +1113,9 @@ packages: resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=} engines: {node: '>=0.8'} - co-body@6.1.0: - resolution: {integrity: sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==} + co-body@6.2.0: + resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==} + engines: {node: '>=8.0.0'} co@4.6.0: resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} @@ -1127,9 +1173,6 @@ packages: resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -1148,6 +1191,10 @@ packages: resolution: {integrity: sha512-05wALDHKjt9zG1JbpziNnWPCwwv9fUKbNf6q0dWaDMJ/eDxW0394Q2R1VAzKvDgoEZBT9FhWSHHFIcgwLgXjcQ==} engines: {node: '>=6.0'} + croner@7.0.8: + resolution: {integrity: sha512-4E27J9ZQV9prM9ggU18QGPYPMSblbA9JuGv4Ff3Gk6supX4RszNGQxBgiFBL6wb/L9HuSMpFbQpduMiDRo+z5Q==} + engines: {node: '>=6.0'} + cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} @@ -1168,6 +1215,9 @@ packages: dayjs@1.11.11: resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -1205,6 +1255,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -1215,6 +1274,10 @@ packages: deep-equal@1.0.1: resolution: {integrity: sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=} + default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -1289,6 +1352,9 @@ packages: ee-first@1.1.1: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + elliptic@6.5.7: + resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1331,8 +1397,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.3: - resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} @@ -1370,6 +1436,10 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + express-force-ssl@0.3.2: resolution: {integrity: sha1-AbK0mK5v0uQRUrIrV6Phc3c69n4=} engines: {node: '>=0.2.2'} @@ -1448,6 +1518,10 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} @@ -1468,9 +1542,6 @@ packages: resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} engines: {node: '>= 0.6'} - from2@2.3.0: - resolution: {integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=} - fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -1510,6 +1581,10 @@ packages: engines: {node: '>=16 || 14 >=14.18'} hasBin: true + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -1557,6 +1632,9 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1589,6 +1667,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hmac-drbg@1.0.1: + resolution: {integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -1627,6 +1708,10 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + humanize-ms@1.2.1: resolution: {integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=} @@ -1641,8 +1726,8 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} indent-string@5.0.0: @@ -1662,13 +1747,18 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + internal-ip@6.2.0: + resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} + engines: {node: '>=10'} + + ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + ip-regex@5.0.0: resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} - ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -1698,6 +1788,10 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-ip@3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + is-ip@4.0.0: resolution: {integrity: sha512-4B4XA2HEIm/PY+OSpeMBXr8pGWBYbXuHgjMAqrwbLO3CPTCAd9ArEJzBUKGZtk9viY6+aSfadGnWyjY3ydYZkw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1738,9 +1832,6 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - isarray@1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - isbinaryfile@5.0.2: resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} engines: {node: '>= 18.0.0'} @@ -1771,6 +1862,9 @@ packages: resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + js-base64@3.7.7: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} @@ -1830,18 +1924,27 @@ packages: lit-element@4.0.5: resolution: {integrity: sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q==} + lit-element@4.1.0: + resolution: {integrity: sha512-gSejRUQJuMQjV2Z59KAS/D4iElUhwKpIyJvZ9w+DIagIQjfJnhR20h2Q5ddpzXGS+fF0tMZ/xEYGMnKmaI/iww==} + lit-html@2.8.0: resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} lit-html@3.1.3: resolution: {integrity: sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==} + lit-html@3.2.0: + resolution: {integrity: sha512-pwT/HwoxqI9FggTrYVarkBKFN9MlTUpLrDHubTmW4SrkL3kkqW5gxwbxMMUnbbRHBC0WTZnYHcjDSCM559VyfA==} + lit@2.8.0: resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} lit@3.1.3: resolution: {integrity: sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==} + lit@3.2.0: + resolution: {integrity: sha512-s6tI33Lf6VpDu7u4YqsSX78D28bYQulM+VAzsGch4fx2H0eLZnJsUBsPWmGYSGoKDNbjtRv02rio1o+UdPVwvw==} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -1984,6 +2087,9 @@ packages: merge-descriptors@1.0.1: resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2079,8 +2185,8 @@ packages: micromark@4.0.0: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -2117,11 +2223,21 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} minipass@7.1.2: @@ -2174,6 +2290,10 @@ packages: encoding: optional: true + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + normalize-newline@4.1.0: resolution: {integrity: sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==} engines: {node: '>=12'} @@ -2186,6 +2306,10 @@ packages: resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} engines: {node: '>=14.16'} + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + object-assign@4.1.1: resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} engines: {node: '>=0.10.0'} @@ -2226,6 +2350,10 @@ packages: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} + p-event@4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + p-finally@1.0.0: resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} engines: {node: '>=4'} @@ -2250,6 +2378,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -2321,8 +2452,8 @@ packages: pend@1.2.0: resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -2344,9 +2475,6 @@ packages: resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} engines: {node: '>=14.16'} - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -2390,6 +2518,10 @@ packages: resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -2409,9 +2541,6 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -2485,9 +2614,6 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -2501,8 +2627,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -2600,9 +2726,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -2617,6 +2740,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + strip-indent@4.0.0: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} @@ -2737,26 +2864,21 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.18.3: - resolution: {integrity: sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==} + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} engines: {node: '>=14.17'} hasBin: true @@ -2780,8 +2902,8 @@ packages: unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} @@ -2906,8 +3028,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -2993,6 +3115,8 @@ packages: snapshots: + '@api.global/typedrequest-interfaces@2.0.2': {} + '@api.global/typedrequest-interfaces@3.0.19': {} '@api.global/typedrequest@3.0.30': @@ -3003,7 +3127,7 @@ snapshots: '@push.rocks/smartbuffer': 3.0.4 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartguard': 3.0.2 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/webrequest': 3.0.37 '@push.rocks/webstream': 1.0.10 @@ -3030,7 +3154,7 @@ snapshots: '@push.rocks/smartntml': 2.0.4 '@push.rocks/smartopen': 2.0.0 '@push.rocks/smartpath': 5.0.18 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrequest': 2.0.22 '@push.rocks/smartrx': 3.0.7 '@push.rocks/smartsitemap': 2.0.3 @@ -3039,7 +3163,7 @@ snapshots: '@push.rocks/taskbuffer': 3.1.7 '@push.rocks/webrequest': 3.0.37 '@push.rocks/webstore': 2.0.20 - '@tsclass/tsclass': 4.0.54 + '@tsclass/tsclass': 4.1.2 '@types/express': 4.17.21 body-parser: 1.20.2 cors: 2.8.5 @@ -3070,19 +3194,19 @@ snapshots: '@apiglobal/typedrequest-interfaces@2.0.1': {} - '@babel/code-frame@7.24.6': + '@babel/code-frame@7.24.7': dependencies: - '@babel/highlight': 7.24.6 - picocolors: 1.0.1 + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 - '@babel/helper-validator-identifier@7.24.6': {} + '@babel/helper-validator-identifier@7.24.7': {} - '@babel/highlight@7.24.6': + '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.0 '@babel/runtime@7.23.4': dependencies: @@ -3109,7 +3233,7 @@ snapshots: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartjson': 5.0.20 '@push.rocks/smartmarkdown': 3.0.3 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrouter': 1.0.16 '@push.rocks/smartrx': 3.0.7 '@push.rocks/smartstate': 2.0.17 @@ -3203,18 +3327,18 @@ snapshots: '@esm-bundle/chai@4.3.4-fix.0': dependencies: - '@types/chai': 4.3.16 + '@types/chai': 4.3.19 - '@git.zone/tsbuild@2.1.80': + '@git.zone/tsbuild@2.1.84': dependencies: '@push.rocks/early': 4.0.4 '@push.rocks/smartcli': 4.0.11 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartfile': 11.0.16 - '@push.rocks/smartlog': 3.0.6 + '@push.rocks/smartfile': 11.0.21 + '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartpath': 5.0.18 - '@push.rocks/smartpromise': 4.0.3 - typescript: 5.4.5 + '@push.rocks/smartpromise': 4.0.4 + typescript: 5.5.2 '@git.zone/tsbundle@2.0.15': dependencies: @@ -3225,7 +3349,7 @@ snapshots: '@push.rocks/smartlog': 3.0.6 '@push.rocks/smartlog-destination-local': 9.0.2 '@push.rocks/smartpath': 5.0.18 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartspawn': 3.0.3 '@types/html-minifier': 4.0.5 esbuild: 0.19.12 @@ -3234,30 +3358,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@git.zone/tsrun@1.2.46(@types/node@20.13.0)': + '@git.zone/tsrun@1.2.49(@types/node@22.5.5)': dependencies: - '@push.rocks/smartfile': 10.0.41 - '@push.rocks/smartshell': 3.0.5 - ts-node: 10.9.2(@types/node@20.13.0)(typescript@5.1.6) - typescript: 5.1.6 + '@push.rocks/smartfile': 11.0.21 + '@push.rocks/smartshell': 3.0.6 + ts-node: 10.9.2(@types/node@22.5.5)(typescript@5.5.2) + typescript: 5.5.2 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - '@types/node' - '@git.zone/tstest@1.0.90(@types/node@20.13.0)': + '@git.zone/tstest@1.0.90(@types/node@22.5.5)': dependencies: '@api.global/typedserver': 3.0.50 '@git.zone/tsbundle': 2.0.15 - '@git.zone/tsrun': 1.2.46(@types/node@20.13.0) + '@git.zone/tsrun': 1.2.49(@types/node@22.5.5) '@push.rocks/consolecolor': 2.0.2 '@push.rocks/smartbrowser': 2.0.6 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartfile': 11.0.16 '@push.rocks/smartlog': 3.0.6 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartshell': 3.0.5 - '@push.rocks/tapbundle': 5.0.23 + '@push.rocks/tapbundle': 5.2.0 '@types/ws': 8.5.10 figures: 6.1.0 ws: 8.17.0 @@ -3270,6 +3394,8 @@ snapshots: - supports-color - utf-8-validate + '@hapi/bourne@3.0.0': {} + '@happy-dom/global-registrator@8.9.0': dependencies: happy-dom: 8.9.0 @@ -3287,17 +3413,19 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@leichtgewicht/ip-codec@2.0.5': {} '@lit-labs/ssr-dom-shim@1.2.0': {} + '@lit-labs/ssr-dom-shim@1.2.1': {} + '@lit/reactive-element@1.6.3': dependencies: '@lit-labs/ssr-dom-shim': 1.2.0 @@ -3325,11 +3453,11 @@ snapshots: '@open-wc/scoped-elements@3.0.5': dependencies: '@open-wc/dedupe-mixin': 1.4.0 - lit: 3.1.3 + lit: 3.2.0 '@open-wc/semantic-dom-diff@0.20.1': dependencies: - '@types/chai': 4.3.16 + '@types/chai': 4.3.19 '@web/test-runner-commands': 0.9.0 transitivePeerDependencies: - bufferutil @@ -3339,8 +3467,8 @@ snapshots: '@open-wc/testing-helpers@3.0.1': dependencies: '@open-wc/scoped-elements': 3.0.5 - lit: 3.1.3 - lit-html: 3.1.3 + lit: 3.2.0 + lit-html: 3.2.0 '@open-wc/testing@4.0.0': dependencies: @@ -3373,7 +3501,7 @@ snapshots: '@push.rocks/early@4.0.4': dependencies: '@push.rocks/consolecolor': 2.0.2 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/isohash@2.0.1': dependencies: @@ -3386,7 +3514,7 @@ snapshots: dependencies: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartmatch': 2.0.0 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrx': 3.0.7 '@push.rocks/smarttime': 4.0.6 '@types/minimatch': 5.1.2 @@ -3420,7 +3548,7 @@ snapshots: '@push.rocks/smartchok@1.0.34': dependencies: '@push.rocks/lik': 6.0.15 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrx': 3.0.7 '@tempfix/watcher': 2.3.0 @@ -3429,29 +3557,35 @@ snapshots: '@push.rocks/lik': 6.0.15 '@push.rocks/smartlog': 3.0.6 '@push.rocks/smartobject': 1.0.12 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrx': 3.0.7 yargs-parser: 21.1.1 + '@push.rocks/smartcrypto@2.0.4': + dependencies: + '@push.rocks/smartpromise': 4.0.4 + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + '@push.rocks/smartdelay@3.0.5': dependencies: - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartenv@5.0.12': dependencies: - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartexit@1.0.23': dependencies: '@push.rocks/lik': 6.0.15 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 tree-kill: 1.2.2 - '@push.rocks/smartexpect@1.0.21': + '@push.rocks/smartexpect@1.2.1': dependencies: '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 fast-deep-equal: 3.1.3 '@push.rocks/smartfeed@1.0.11': @@ -3462,25 +3596,6 @@ snapshots: '@push.rocks/smartfile-interfaces@1.0.7': {} - '@push.rocks/smartfile@10.0.41': - dependencies: - '@push.rocks/lik': 6.0.15 - '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartfile-interfaces': 1.0.7 - '@push.rocks/smarthash': 3.0.4 - '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartmime': 1.0.6 - '@push.rocks/smartpath': 5.0.18 - '@push.rocks/smartpromise': 4.0.3 - '@push.rocks/smartrequest': 2.0.22 - '@push.rocks/smartstream': 2.0.8 - '@types/fs-extra': 11.0.4 - '@types/glob': 8.1.0 - '@types/js-yaml': 4.0.9 - fs-extra: 11.2.0 - glob: 10.4.1 - js-yaml: 4.1.0 - '@push.rocks/smartfile@11.0.16': dependencies: '@push.rocks/lik': 6.0.15 @@ -3490,7 +3605,7 @@ snapshots: '@push.rocks/smartjson': 5.0.20 '@push.rocks/smartmime': 2.0.2 '@push.rocks/smartpath': 5.0.18 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrequest': 2.0.22 '@push.rocks/smartstream': 3.0.38 '@types/fs-extra': 11.0.4 @@ -3500,15 +3615,34 @@ snapshots: glob: 10.4.1 js-yaml: 4.1.0 + '@push.rocks/smartfile@11.0.21': + dependencies: + '@push.rocks/lik': 6.0.15 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile-interfaces': 1.0.7 + '@push.rocks/smarthash': 3.0.4 + '@push.rocks/smartjson': 5.0.20 + '@push.rocks/smartmime': 2.0.2 + '@push.rocks/smartpath': 5.0.18 + '@push.rocks/smartpromise': 4.0.4 + '@push.rocks/smartrequest': 2.0.22 + '@push.rocks/smartstream': 3.0.44 + '@types/fs-extra': 11.0.4 + '@types/glob': 8.1.0 + '@types/js-yaml': 4.0.9 + fs-extra: 11.2.0 + glob: 10.4.5 + js-yaml: 4.1.0 + '@push.rocks/smartguard@3.0.2': dependencies: - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrequest': 2.0.22 '@push.rocks/smarthash@3.0.4': dependencies: '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@types/through2': 2.0.41 through2: 4.0.2 @@ -3527,17 +3661,27 @@ snapshots: dependencies: '@push.rocks/consolecolor': 2.0.2 '@push.rocks/smartlog-interfaces': 3.0.0 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartlog-interfaces@3.0.0': dependencies: '@apiglobal/typedrequest-interfaces': 2.0.1 + '@push.rocks/smartlog-interfaces@3.0.2': + dependencies: + '@api.global/typedrequest-interfaces': 2.0.2 + '@tsclass/tsclass': 4.1.2 + '@push.rocks/smartlog@3.0.6': dependencies: '@push.rocks/isounique': 1.0.5 '@push.rocks/smartlog-interfaces': 3.0.0 + '@push.rocks/smartlog@3.0.7': + dependencies: + '@push.rocks/isounique': 1.0.5 + '@push.rocks/smartlog-interfaces': 3.0.2 + '@push.rocks/smartmanifest@2.0.2': {} '@push.rocks/smartmarkdown@3.0.3': @@ -3559,11 +3703,6 @@ snapshots: dependencies: matcher: 5.0.0 - '@push.rocks/smartmime@1.0.6': - dependencies: - '@types/mime-types': 2.1.4 - mime-types: 2.1.35 - '@push.rocks/smartmime@2.0.2': dependencies: '@types/mime-types': 2.1.4 @@ -3593,7 +3732,7 @@ snapshots: '@push.rocks/smartobject@1.0.12': dependencies: fast-deep-equal: 3.1.3 - minimatch: 9.0.4 + minimatch: 9.0.5 '@push.rocks/smartopen@2.0.0': dependencies: @@ -3608,10 +3747,10 @@ snapshots: '@push.rocks/smartfile': 11.0.16 '@push.rocks/smartnetwork': 3.0.2 '@push.rocks/smartpath': 5.0.18 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartpuppeteer': 2.0.2 '@push.rocks/smartunique': 3.0.9 - '@tsclass/tsclass': 4.0.54 + '@tsclass/tsclass': 4.1.2 '@types/express': 4.17.21 express: 4.19.2 pdf-lib: 1.17.1 @@ -3623,7 +3762,7 @@ snapshots: - supports-color - utf-8-validate - '@push.rocks/smartpromise@4.0.3': {} + '@push.rocks/smartpromise@4.0.4': {} '@push.rocks/smartpuppeteer@2.0.2': dependencies: @@ -3639,7 +3778,7 @@ snapshots: '@push.rocks/smartrequest@2.0.22': dependencies: - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smarturl': 3.0.7 agentkeepalive: 4.5.0 form-data: 4.0.0 @@ -3650,14 +3789,23 @@ snapshots: '@push.rocks/smartrx@3.0.7': dependencies: - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 rxjs: 7.8.1 '@push.rocks/smartshell@3.0.5': dependencies: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartexit': 1.0.23 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 + '@types/which': 3.0.4 + tree-kill: 1.2.2 + which: 4.0.0 + + '@push.rocks/smartshell@3.0.6': + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartexit': 1.0.23 + '@push.rocks/smartpromise': 4.0.4 '@types/which': 3.0.4 tree-kill: 1.2.2 which: 4.0.0 @@ -3669,7 +3817,7 @@ snapshots: '@push.rocks/smartxml': 1.0.8 '@push.rocks/smartyaml': 2.0.5 '@push.rocks/webrequest': 3.0.37 - '@tsclass/tsclass': 4.0.54 + '@tsclass/tsclass': 4.1.2 '@push.rocks/smartsocket@2.0.27': dependencies: @@ -3682,7 +3830,7 @@ snapshots: '@push.rocks/smartenv': 5.0.12 '@push.rocks/smartjson': 5.0.20 '@push.rocks/smartlog': 3.0.6 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrx': 3.0.7 '@push.rocks/smarttime': 4.0.6 engine.io: 6.5.4 @@ -3696,7 +3844,7 @@ snapshots: '@push.rocks/smartspawn@3.0.3': dependencies: - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 spawn-wrap: 2.0.0 threads: 1.7.0 tiny-worker: 2.3.0 @@ -3708,26 +3856,24 @@ snapshots: '@push.rocks/isohash': 2.0.1 '@push.rocks/lik': 6.0.15 '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrx': 3.0.7 '@push.rocks/webstore': 2.0.20 - '@push.rocks/smartstream@2.0.8': - dependencies: - '@push.rocks/smartpromise': 4.0.3 - '@push.rocks/smartrx': 3.0.7 - '@types/from2': 2.3.5 - '@types/through2': 2.0.41 - from2: 2.3.0 - through2: 4.0.2 - '@push.rocks/smartstream@3.0.38': dependencies: '@push.rocks/lik': 6.0.15 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrx': 3.0.7 '@push.rocks/webstream': 1.0.10 + '@push.rocks/smartstream@3.0.44': + dependencies: + '@push.rocks/lik': 6.0.15 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartpromise': 4.0.4 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartstring@4.0.15': dependencies: '@push.rocks/isounique': 1.0.5 @@ -3743,12 +3889,22 @@ snapshots: dependencies: '@push.rocks/lik': 6.0.15 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 croner: 7.0.7 dayjs: 1.11.11 is-nan: 1.3.2 pretty-ms: 8.0.0 + '@push.rocks/smarttime@4.0.8': + dependencies: + '@push.rocks/lik': 6.0.15 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartpromise': 4.0.4 + croner: 7.0.8 + dayjs: 1.11.13 + is-nan: 1.3.2 + pretty-ms: 8.0.0 + '@push.rocks/smartunique@3.0.9': dependencies: '@types/uuid': 9.0.8 @@ -3766,16 +3922,18 @@ snapshots: '@types/js-yaml': 3.12.10 js-yaml: 3.14.1 - '@push.rocks/tapbundle@5.0.23': + '@push.rocks/tapbundle@5.2.0': dependencies: '@open-wc/testing': 4.0.0 '@push.rocks/consolecolor': 2.0.2 + '@push.rocks/smartcrypto': 2.0.4 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartenv': 5.0.12 - '@push.rocks/smartexpect': 1.0.21 + '@push.rocks/smartexpect': 1.2.1 '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartpromise': 4.0.3 - '@push.rocks/smarttime': 4.0.6 + '@push.rocks/smartpromise': 4.0.4 + '@push.rocks/smartshell': 3.0.6 + '@push.rocks/smarttime': 4.0.8 transitivePeerDependencies: - bufferutil - supports-color @@ -3786,7 +3944,7 @@ snapshots: '@push.rocks/lik': 6.0.15 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartlog': 3.0.6 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrx': 3.0.7 '@push.rocks/smarttime': 4.0.6 '@push.rocks/smartunique': 3.0.9 @@ -3796,14 +3954,14 @@ snapshots: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartenv': 5.0.12 '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/webstore': 2.0.20 '@push.rocks/websetup@3.0.19': dependencies: '@pushrocks/smartdelay': 3.0.1 '@pushrocks/smartpromise': 4.0.2 - '@tsclass/tsclass': 4.0.54 + '@tsclass/tsclass': 4.1.2 '@push.rocks/webstore@2.0.20': dependencies: @@ -3811,7 +3969,7 @@ snapshots: '@push.rocks/lik': 6.0.15 '@push.rocks/smartenv': 5.0.12 '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpromise': 4.0.4 '@push.rocks/smartrx': 3.0.7 '@tempfix/idb': 8.0.3 fake-indexeddb: 5.0.2 @@ -3979,9 +4137,9 @@ snapshots: dependencies: type-fest: 2.19.0 - '@tsclass/tsclass@4.0.54': + '@tsclass/tsclass@4.1.2': dependencies: - type-fest: 4.18.3 + type-fest: 4.26.1 '@tsconfig/node10@1.0.11': {} @@ -3993,36 +4151,40 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/babel__code-frame@7.0.6': {} + '@types/bn.js@5.1.6': + dependencies: + '@types/node': 22.5.5 + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/buffer-json@2.0.3': {} '@types/chai-dom@1.11.3': dependencies: - '@types/chai': 4.3.16 + '@types/chai': 4.3.19 - '@types/chai@4.3.16': {} + '@types/chai@4.3.19': {} '@types/clean-css@4.2.11': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 source-map: 0.6.1 '@types/co-body@6.1.3': dependencies: - '@types/node': 20.13.0 - '@types/qs': 6.9.15 + '@types/node': 22.5.5 + '@types/qs': 6.9.16 '@types/connect@3.4.38': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/content-disposition@0.5.8': {} @@ -4035,11 +4197,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 4.17.21 '@types/keygrip': 1.0.6 - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/cors@2.8.17': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/debounce@1.2.4': {} @@ -4051,11 +4213,15 @@ snapshots: '@types/dns-packet@5.6.5': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 + + '@types/elliptic@6.4.18': + dependencies: + '@types/bn.js': 5.1.6 '@types/express-serve-static-core@4.19.3': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -4067,19 +4233,15 @@ snapshots: '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 - '@types/from2@2.3.5': - dependencies: - '@types/node': 20.13.0 - '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/hast@3.0.4': dependencies: @@ -4113,7 +4275,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/keygrip@1.0.6': {} @@ -4130,7 +4292,7 @@ snapshots: '@types/http-errors': 2.0.4 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/mdast@4.0.4': dependencies: @@ -4146,9 +4308,13 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@20.13.0': + '@types/node-forge@1.3.11': dependencies: - undici-types: 5.26.5 + '@types/node': 22.5.5 + + '@types/node@22.5.5': + dependencies: + undici-types: 6.19.8 '@types/parse5@6.0.3': {} @@ -4156,6 +4322,8 @@ snapshots: '@types/qs@6.9.15': {} + '@types/qs@6.9.16': {} + '@types/randomatic@3.1.5': {} '@types/range-parser@1.2.7': {} @@ -4165,17 +4333,17 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/send': 0.17.4 '@types/sinon-chai@3.2.12': dependencies: - '@types/chai': 4.3.16 + '@types/chai': 4.3.19 '@types/sinon': 17.0.3 '@types/sinon@17.0.3': @@ -4188,7 +4356,7 @@ snapshots: '@types/through2@2.0.41': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/trusted-types@2.0.7': {} @@ -4208,15 +4376,15 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/ws@8.5.10': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.13.0 + '@types/node': 22.5.5 optional: true '@ungap/structured-clone@1.2.0': {} @@ -4232,7 +4400,7 @@ snapshots: '@web/parse5-utils': 2.1.0 chokidar: 3.6.0 clone: 2.1.2 - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 get-stream: 6.0.1 is-stream: 2.0.1 isbinaryfile: 5.0.2 @@ -4244,7 +4412,7 @@ snapshots: mime-types: 2.1.35 parse5: 6.0.1 picomatch: 2.3.1 - ws: 7.5.9 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - supports-color @@ -4257,16 +4425,16 @@ snapshots: '@web/test-runner-commands@0.9.0': dependencies: - '@web/test-runner-core': 0.13.2 + '@web/test-runner-core': 0.13.3 mkdirp: 1.0.4 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@web/test-runner-core@0.13.2': + '@web/test-runner-core@0.13.3': dependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.24.7 '@types/babel__code-frame': 7.0.6 '@types/co-body': 6.1.3 '@types/convert-source-map': 2.0.3 @@ -4277,12 +4445,12 @@ snapshots: '@web/dev-server-core': 0.7.2 chokidar: 3.6.0 cli-cursor: 3.1.0 - co-body: 6.1.0 + co-body: 6.2.0 convert-source-map: 2.0.0 debounce: 1.2.1 dependency-graph: 0.11.0 globby: 11.1.0 - ip: 2.0.1 + internal-ip: 6.2.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.1.7 @@ -4302,9 +4470,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-walk@8.3.2: {} + acorn-walk@8.3.4: + dependencies: + acorn: 8.12.1 - acorn@8.11.3: {} + acorn@8.12.1: {} agent-base@6.0.2: dependencies: @@ -4366,7 +4536,7 @@ snapshots: asynckit@0.4.0: {} - axe-core@4.9.1: {} + axe-core@4.10.0: {} bail@2.0.2: {} @@ -4386,6 +4556,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bn.js@4.12.0: {} + body-parser@1.20.2: dependencies: bytes: 3.1.2 @@ -4423,6 +4595,8 @@ snapshots: p-queue: 6.6.2 unload: 2.4.1 + brorand@1.1.0: {} + buffer-crc32@0.2.13: {} buffer-json@2.0.0: {} @@ -4475,7 +4649,7 @@ snapshots: chai-a11y-axe@1.5.0: dependencies: - axe-core: 4.9.1 + axe-core: 4.10.0 chalk@2.4.2: dependencies: @@ -4519,10 +4693,11 @@ snapshots: clone@2.1.2: {} - co-body@6.1.0: + co-body@6.2.0: dependencies: + '@hapi/bourne': 3.0.0 inflation: 2.1.0 - qs: 6.12.1 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 @@ -4569,8 +4744,6 @@ snapshots: depd: 2.0.0 keygrip: 1.1.0 - core-util-is@1.0.3: {} - cors@2.8.5: dependencies: object-assign: 4.1.1 @@ -4584,6 +4757,8 @@ snapshots: croner@7.0.7: {} + croner@7.0.8: {} + cross-fetch@3.1.5: dependencies: node-fetch: 2.6.7 @@ -4609,6 +4784,8 @@ snapshots: dayjs@1.11.11: {} + dayjs@1.11.13: {} + debounce@1.2.1: {} debug@2.6.9: @@ -4627,6 +4804,10 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.7: + dependencies: + ms: 2.1.3 + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -4637,6 +4818,10 @@ snapshots: deep-equal@1.0.1: {} + default-gateway@6.0.3: + dependencies: + execa: 5.1.1 + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -4695,6 +4880,16 @@ snapshots: ee-first@1.1.1: {} + elliptic@6.5.7: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -4723,7 +4918,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 20.13.0 + '@types/node': 22.5.5 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -4748,7 +4943,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.5.3: {} + es-module-lexer@1.5.4: {} esbuild@0.19.12: optionalDependencies: @@ -4792,6 +4987,18 @@ snapshots: eventemitter3@4.0.7: {} + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + express-force-ssl@0.3.2: dependencies: lodash.assign: 3.2.0 @@ -4858,7 +5065,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} @@ -4923,6 +5130,11 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + form-data-encoder@2.1.4: {} form-data@4.0.0: @@ -4937,11 +5149,6 @@ snapshots: fresh@0.5.2: {} - from2@2.3.0: - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.8 - fs-constants@1.0.0: {} fs-extra@11.2.0: @@ -4979,10 +5186,19 @@ snapshots: dependencies: foreground-child: 3.1.1 jackspeak: 3.1.2 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 path-scurry: 1.11.1 + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -4997,7 +5213,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -5058,6 +5274,11 @@ snapshots: dependencies: has-symbols: 1.0.3 + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -5138,6 +5359,12 @@ snapshots: he@1.2.0: {} + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + html-escaper@2.0.2: {} html-minifier@4.0.0: @@ -5194,6 +5421,8 @@ snapshots: transitivePeerDependencies: - supports-color + human-signals@2.1.0: {} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 @@ -5208,7 +5437,7 @@ snapshots: ieee754@1.2.1: {} - ignore@5.3.1: {} + ignore@5.3.2: {} indent-string@5.0.0: {} @@ -5223,9 +5452,16 @@ snapshots: inherits@2.0.4: {} - ip-regex@5.0.0: {} + internal-ip@6.2.0: + dependencies: + default-gateway: 6.0.3 + ipaddr.js: 1.9.1 + is-ip: 3.1.0 + p-event: 4.2.0 - ip@2.0.1: {} + ip-regex@4.3.0: {} + + ip-regex@5.0.0: {} ipaddr.js@1.9.1: {} @@ -5247,6 +5483,10 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-ip@3.1.0: + dependencies: + ip-regex: 4.3.0 + is-ip@4.0.0: dependencies: ip-regex: 5.0.0 @@ -5274,8 +5514,6 @@ snapshots: dependencies: is-docker: 2.2.1 - isarray@1.0.0: {} - isbinaryfile@5.0.2: {} isexe@2.0.0: {} @@ -5303,6 +5541,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + js-base64@3.7.7: {} js-tokens@4.0.0: {} @@ -5347,7 +5591,7 @@ snapshots: koa-send@5.0.1: dependencies: - debug: 4.3.5 + debug: 4.3.7 http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: @@ -5367,7 +5611,7 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.3.5 + debug: 4.3.7 delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -5400,6 +5644,12 @@ snapshots: '@lit/reactive-element': 2.0.4 lit-html: 3.1.3 + lit-element@4.1.0: + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.1 + '@lit/reactive-element': 2.0.4 + lit-html: 3.2.0 + lit-html@2.8.0: dependencies: '@types/trusted-types': 2.0.7 @@ -5408,6 +5658,10 @@ snapshots: dependencies: '@types/trusted-types': 2.0.7 + lit-html@3.2.0: + dependencies: + '@types/trusted-types': 2.0.7 + lit@2.8.0: dependencies: '@lit/reactive-element': 1.6.3 @@ -5420,6 +5674,12 @@ snapshots: lit-element: 4.0.5 lit-html: 3.1.3 + lit@3.2.0: + dependencies: + '@lit/reactive-element': 2.0.4 + lit-element: 4.1.0 + lit-html: 3.2.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -5493,7 +5753,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 make-error-cause@2.3.0: dependencies: @@ -5641,6 +5901,8 @@ snapshots: merge-descriptors@1.0.1: {} + merge-stream@2.0.0: {} + merge2@1.4.1: {} methods@1.1.2: {} @@ -5843,7 +6105,7 @@ snapshots: transitivePeerDependencies: - supports-color - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -5866,11 +6128,19 @@ snapshots: min-indent@1.0.1: {} + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -5902,6 +6172,8 @@ snapshots: dependencies: whatwg-url: 5.0.0 + node-forge@1.3.1: {} + normalize-newline@4.1.0: dependencies: replace-buffer: 1.2.1 @@ -5910,6 +6182,10 @@ snapshots: normalize-url@8.0.1: {} + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + object-assign@4.1.1: {} object-inspect@1.13.1: {} @@ -5942,6 +6218,10 @@ snapshots: p-cancelable@3.0.0: {} + p-event@4.2.0: + dependencies: + p-timeout: 3.2.0 + p-finally@1.0.0: {} p-limit@2.3.0: @@ -5963,6 +6243,8 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.0: {} + pako@1.0.11: {} param-case@2.1.1: @@ -6017,7 +6299,7 @@ snapshots: pend@1.2.0: {} - picocolors@1.0.1: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} @@ -6035,8 +6317,6 @@ snapshots: dependencies: parse-ms: 3.0.0 - process-nextick-args@2.0.1: {} - progress@2.0.3: {} property-information@6.5.0: {} @@ -6094,6 +6374,10 @@ snapshots: dependencies: side-channel: 1.0.6 + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + queue-microtask@1.2.3: {} quick-lru@5.1.1: {} @@ -6113,16 +6397,6 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -6227,8 +6501,6 @@ snapshots: dependencies: tslib: 2.6.2 - safe-buffer@5.1.2: {} - safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} @@ -6237,7 +6509,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.2: {} + semver@7.6.3: {} send@0.18.0: dependencies: @@ -6378,10 +6650,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -6399,6 +6667,8 @@ snapshots: dependencies: ansi-regex: 6.0.1 + strip-final-newline@2.0.0: {} + strip-indent@4.0.0: dependencies: min-indent: 1.0.1 @@ -6485,21 +6755,21 @@ snapshots: trough@2.2.0: {} - ts-node@10.9.2(@types/node@20.13.0)(typescript@5.1.6): + ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.13.0 - acorn: 8.11.3 - acorn-walk: 8.3.2 + '@types/node': 22.5.5 + acorn: 8.12.1 + acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.1.6 + typescript: 5.5.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -6519,18 +6789,16 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.18.3: {} + type-fest@4.26.1: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typescript@5.1.6: {} - typescript@5.3.3: {} - typescript@5.4.5: {} + typescript@5.5.2: {} typeson-registry@1.0.0-alpha.39: dependencies: @@ -6549,7 +6817,7 @@ snapshots: buffer: 5.7.1 through: 2.3.8 - undici-types@5.26.5: {} + undici-types@6.19.8: {} unified@11.0.4: dependencies: @@ -6682,7 +6950,7 @@ snapshots: wrappy@1.0.2: {} - ws@7.5.9: {} + ws@7.5.10: {} ws@8.11.0: {} diff --git a/test/test.server.ts b/test/test.server.ts index e69de29..a85554a 100644 --- a/test/test.server.ts +++ b/test/test.server.ts @@ -0,0 +1,163 @@ +import { expect, tap } from '@push.rocks/tapbundle'; +import { tapNodeTools } from '@push.rocks/tapbundle/node'; + +import * as dnsPacket from 'dns-packet'; +import * as https from 'https'; +import * as dgram from 'dgram'; + +import * as smartdns from '../ts_server/index.js'; + +let dnsServer: smartdns.DnsServer; + +tap.test('should create an instance of DnsServer', async () => { + // Use valid options + const httpsData = await tapNodeTools.createHttpsCert(); + dnsServer = new smartdns.DnsServer({ + httpsKey: httpsData.key, + httpsCert: httpsData.cert, + httpsPort: 8080, + udpPort: 8081, + }); + expect(dnsServer).toBeInstanceOf(smartdns.DnsServer); +}); + +tap.test('should start the server', async () => { + await dnsServer.start(); + // @ts-ignore + expect(dnsServer.httpsServer).toBeDefined(); +}); + +tap.test('lets add a handler', async () => { + dnsServer.registerHandler('*.bleu.de', ['A'], (question) => { + return { + name: question.name, + type: 'A', + class: 'IN', + ttl: 300, + data: '127.0.0.1', + }; + }); + + // @ts-ignore + const response = dnsServer.processDnsRequest({ + type: 'query', + id: 1, + flags: 0, + questions: [ + { + name: 'dnsly_a.bleu.de', + type: 'A', + class: 'IN', + }, + ], + answers: [], + }); + expect(response.answers[0]).toEqual({ + name: 'dnsly_a.bleu.de', + type: 'A', + class: 'IN', + ttl: 300, + data: '127.0.0.1', + }); +}); + +tap.test('lets query over https', async () => { + const query = dnsPacket.encode({ + type: 'query', + id: 2, + flags: dnsPacket.RECURSION_DESIRED, + questions: [ + { + name: 'dnsly_a.bleu.de', + type: 'A', + class: 'IN', + }, + ], + }); + + const response = await fetch('https://localhost:8080/dns-query', { + method: 'POST', + body: query, + headers: { + 'Content-Type': 'application/dns-message', + } + }); + + expect(response.status).toEqual(200); + + const responseData = await response.arrayBuffer(); + const dnsResponse = dnsPacket.decode(Buffer.from(responseData)); + + console.log(dnsResponse.answers[0]); + + expect(dnsResponse.answers[0]).toEqual({ + name: 'dnsly_a.bleu.de', + type: 'A', + class: 'IN', + ttl: 300, + flush: false, + data: '127.0.0.1', + }); +}); + +tap.test('lets query over udp', async () => { + const client = dgram.createSocket('udp4'); + + const query = dnsPacket.encode({ + type: 'query', + id: 3, + flags: dnsPacket.RECURSION_DESIRED, + questions: [ + { + name: 'dnsly_a.bleu.de', + type: 'A', + class: 'IN', + }, + ], + }); + + const responsePromise = new Promise((resolve, reject) => { + client.on('message', (msg) => { + const dnsResponse = dnsPacket.decode(msg); + resolve(dnsResponse); + client.close(); + }); + + client.on('error', (err) => { + reject(err); + client.close(); + }); + + client.send(query, 8081, 'localhost', (err) => { + if (err) { + reject(err); + client.close(); + } + }); + }); + + const dnsResponse = await responsePromise; + + console.log(dnsResponse.answers[0]); + + expect(dnsResponse.answers[0]).toEqual({ + name: 'dnsly_a.bleu.de', + type: 'A', + class: 'IN', + ttl: 300, + flush: false, + data: '127.0.0.1', + }); +}); + +tap.test('should run for a while', async (toolsArg) => { + await toolsArg.delayFor(1000); +}); + +tap.test('should stop the server', async () => { + await dnsServer.stop(); + // @ts-ignore + expect(dnsServer.httpsServer).toBeFalsy(); +}); + +await tap.start(); \ No newline at end of file diff --git a/ts_client/classes.dnsclient.ts b/ts_client/classes.dnsclient.ts index a889279..267c7c4 100644 --- a/ts_client/classes.dnsclient.ts +++ b/ts_client/classes.dnsclient.ts @@ -24,7 +24,7 @@ export const makeNodeProcessUseDnsProvider = (providerArg: TDnsProvider) => { export interface ISmartDnsConstructorOptions {} -export interface IGoogleDNSHTTPSResponse { +export interface IDnsJsonResponse { Status: number; TC: boolean; RD: boolean; @@ -135,14 +135,14 @@ export class Smartdns { ): Promise { const requestUrl = `https://cloudflare-dns.com/dns-query?name=${recordNameArg}&type=${recordTypeArg}&do=1`; const returnArray: plugins.tsclass.network.IDnsRecord[] = []; - const getResponseBody = async (counterArg = 0): Promise => { + const getResponseBody = async (counterArg = 0): Promise => { const response = await plugins.smartrequest.request(requestUrl, { method: 'GET', headers: { accept: 'application/dns-json', }, }); - const responseBody: IGoogleDNSHTTPSResponse = response.body; + const responseBody: IDnsJsonResponse = response.body; if (responseBody?.Status !== 0 && counterArg < retriesCounterArg) { await plugins.smartdelay.delayFor(500); return getResponseBody(counterArg++); diff --git a/ts_client/dnsly.plugins.ts b/ts_client/dnsly.plugins.ts index 0923d05..8710b68 100644 --- a/ts_client/dnsly.plugins.ts +++ b/ts_client/dnsly.plugins.ts @@ -16,7 +16,3 @@ export { smartdelay, smartenv, smartpromise, smartrequest }; import * as tsclass from '@tsclass/tsclass'; export { tsclass }; - -// third party scope -const dns2 = smartenvInstance.getSafeNodeModule('dns2'); -export { dns2 }; diff --git a/ts_server/classes.dnsserver.ts b/ts_server/classes.dnsserver.ts index 8b3f88e..5165abd 100644 --- a/ts_server/classes.dnsserver.ts +++ b/ts_server/classes.dnsserver.ts @@ -7,59 +7,61 @@ interface IDnsServerOptions { udpPort: number; } -class DnsServer { +interface IDnsHandler { + domainPattern: string; + recordTypes: string[]; + handler: (question: plugins.dnsPacket.Question) => plugins.dnsPacket.Answer | null; +} + +export class DnsServer { private udpServer: plugins.dgram.Socket; private httpsServer: plugins.https.Server; + private handlers: IDnsHandler[] = []; - constructor(private options: IDnsServerOptions) { - this.udpServer = plugins.dgram.createSocket('udp4'); - this.setupUdpServer(); + constructor(private options: IDnsServerOptions) {} - this.httpsServer = plugins.https.createServer( - { - key: plugins.fs.readFileSync(options.httpsKey), - cert: plugins.fs.readFileSync(options.httpsCert) - }, - this.handleHttpsRequest.bind(this) - ); + public registerHandler( + domainPattern: string, + recordTypes: string[], + handler: (question: plugins.dnsPacket.Question) => plugins.dnsPacket.Answer | null + ): void { + this.handlers.push({ domainPattern, recordTypes, handler }); } - private setupUdpServer(): void { - this.udpServer.on('message', (msg, rinfo) => { - const request = plugins.dnsPacket.decode(msg); - const response = { - type: 'response' as const, - id: request.id, - flags: plugins.dnsPacket.RECURSION_DESIRED | plugins.dnsPacket.RECURSION_AVAILABLE, - questions: request.questions, - answers: [] as plugins.dnsPacket.Answer[] - }; + private processDnsRequest(request: plugins.dnsPacket.Packet): plugins.dnsPacket.Packet { + const response: plugins.dnsPacket.Packet = { + type: 'response', + id: request.id, + flags: plugins.dnsPacket.RECURSION_DESIRED | plugins.dnsPacket.RECURSION_AVAILABLE, + questions: request.questions, + answers: [], + }; - const question = request.questions[0]; - console.log(`UDP query for ${question.name} of type ${question.type}`); + for (const question of request.questions) { + console.log(`Query for ${question.name} of type ${question.type}`); - if (question.type === 'A') { - response.answers.push({ - name: question.name, - type: 'A', - class: 'IN', - ttl: 300, - data: '127.0.0.1' - }); + let answered = false; + + for (const handlerEntry of this.handlers) { + if ( + plugins.minimatch.minimatch(question.name, handlerEntry.domainPattern) && + handlerEntry.recordTypes.includes(question.type) + ) { + const answer = handlerEntry.handler(question); + if (answer) { + response.answers.push(answer); + answered = true; + break; + } + } } - const responseData = plugins.dnsPacket.encode(response); - this.udpServer.send(responseData, rinfo.port, rinfo.address); - }); + if (!answered) { + console.log(`No handler found for ${question.name} of type ${question.type}`); + } + } - this.udpServer.on('error', (err) => { - console.error(`UDP Server error:\n${err.stack}`); - this.udpServer.close(); - }); - - this.udpServer.bind(this.options.udpPort, '0.0.0.0', () => { - console.log(`UDP DNS server running on port ${this.options.udpPort}`); - }); + return response; } private handleHttpsRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void { @@ -71,27 +73,7 @@ class DnsServer { }).on('end', () => { const msg = Buffer.concat(body); const request = plugins.dnsPacket.decode(msg); - const response = { - type: 'response' as const, - id: request.id, - flags: plugins.dnsPacket.RECURSION_DESIRED | plugins.dnsPacket.RECURSION_AVAILABLE, - questions: request.questions, - answers: [] as plugins.dnsPacket.Answer[] - }; - - const question = request.questions[0]; - console.log(`DoH query for ${question.name} of type ${question.type}`); - - if (question.type === 'A') { - response.answers.push({ - name: question.name, - type: 'A', - class: 'IN', - ttl: 300, - data: '127.0.0.1' - }); - } - + const response = this.processDnsRequest(request); const responseData = plugins.dnsPacket.encode(response); res.writeHead(200, { 'Content-Type': 'application/dns-message' }); res.end(responseData); @@ -102,19 +84,64 @@ class DnsServer { } } - public start(): void { - this.httpsServer.listen(this.options.httpsPort, () => { - console.log(`DoH server running on port ${this.options.httpsPort}`); + public async start(): Promise { + this.httpsServer = plugins.https.createServer( + { + key: this.options.httpsKey, + cert: this.options.httpsCert, + }, + this.handleHttpsRequest.bind(this) + ); + + this.udpServer = plugins.dgram.createSocket('udp4'); + this.udpServer.on('message', (msg, rinfo) => { + const request = plugins.dnsPacket.decode(msg); + const response = this.processDnsRequest(request); + const responseData = plugins.dnsPacket.encode(response); + this.udpServer.send(responseData, rinfo.port, rinfo.address); }); + + this.udpServer.on('error', (err) => { + console.error(`UDP Server error:\n${err.stack}`); + this.udpServer.close(); + }); + + const udpListeningDeferred = plugins.smartpromise.defer(); + const httpsListeningDeferred = plugins.smartpromise.defer(); + try { + this.udpServer.bind(this.options.udpPort, '0.0.0.0', () => { + console.log(`UDP DNS server running on port ${this.options.udpPort}`); + udpListeningDeferred.resolve(); + }); + + this.httpsServer.listen(this.options.httpsPort, () => { + console.log(`HTTPS DNS server running on port ${this.options.httpsPort}`); + httpsListeningDeferred.resolve(); + }); + } catch (err) { + console.error('Error starting DNS server:', err); + process.exit(1); + } + await Promise.all([udpListeningDeferred.promise, httpsListeningDeferred.promise]); } - public stop(): void { + public async stop(): Promise { + const doneUdp = plugins.smartpromise.defer(); + const doneHttps = plugins.smartpromise.defer(); this.udpServer.close(() => { console.log('UDP DNS server stopped'); + this.udpServer.unref(); + this.udpServer = null; + doneUdp.resolve(); }); this.httpsServer.close(() => { console.log('HTTPS DNS server stopped'); + this.httpsServer.unref(); + this.httpsServer = null; + doneHttps.resolve(); }); + + await Promise.all([doneUdp.promise, doneHttps.promise]); } -} +} \ No newline at end of file diff --git a/ts_server/classes.dnstools.ts b/ts_server/classes.dnstools.ts new file mode 100644 index 0000000..a5437b8 --- /dev/null +++ b/ts_server/classes.dnstools.ts @@ -0,0 +1,83 @@ +import * as plugins from './plugins.js'; + +interface DnssecZone { + zone: string; + algorithm: string; + keySize: number; + days: number; +} + +interface DnssecKeyPair { + private: string; + public: string; +} + +class DnsSec { + private zone: DnssecZone; + private keyPair: DnssecKeyPair; + private ec: any; // declare the ec instance + + constructor(zone: DnssecZone) { + this.zone = zone; + this.ec = new plugins.elliptic.ec('secp256k1'); // Create an instance of the secp256k1 curve + this.keyPair = this.generateKeyPair(); + } + + private generateKeyPair(): DnssecKeyPair { + const key = this.ec.genKeyPair(); + const privatePem = key.getPrivate().toString('hex'); // get private key in hex format + // @ts-ignore + const publicPem = key.getPublic().toString('hex'); // get public key in hex format + + return { + private: privatePem, + public: publicPem + }; + } + + private formatPEM(pem: string, type: string): string { + const start = `-----BEGIN ${type}-----`; + const end = `-----END ${type}-----`; + + const formatted = [start]; + for (let i = 0; i < pem.length; i += 64) { + formatted.push(pem.slice(i, i + 64)); + } + formatted.push(end); + return formatted.join('\n'); + } + + public getDSRecord(): string { + const publicPem = this.keyPair.public; + const publicKey = this.ec.keyFromPublic(publicPem); // Create a public key from the publicPEM + + const digest = publicKey.getPublic(); // get public point + return `DS {id} 8 {algorithm} {digest} {hash-algorithm}\n` + .replace('{id}', '256') // zone hash + .replace('{algorithm}', this.getAlgorithm()) + .replace('{digest}', `0x${digest.getX()}${digest.getY()}`) + .replace('{hash-algorithm}', '2'); + } + + private getAlgorithm(): string { + switch (this.zone.algorithm) { + case 'ECDSA': + return '8'; + case 'ED25519': + return '15'; + case 'RSA': + return '1'; + default: + throw new Error(`Unsupported algorithm: ${this.zone.algorithm}`); + } + } + + public getKeyPair(): DnssecKeyPair { + return this.keyPair; + } + + public getDsAndKeyPair(): [DnssecKeyPair, string] { + const dsRecord = this.getDSRecord(); + return [this.keyPair, dsRecord]; + } +} \ No newline at end of file diff --git a/ts_server/index.ts b/ts_server/index.ts index e69de29..da3b31d 100644 --- a/ts_server/index.ts +++ b/ts_server/index.ts @@ -0,0 +1 @@ +export * from './classes.dnsserver.js'; \ No newline at end of file diff --git a/ts_server/plugins.ts b/ts_server/plugins.ts index 6ca50a9..29499aa 100644 --- a/ts_server/plugins.ts +++ b/ts_server/plugins.ts @@ -1,3 +1,4 @@ +// node native import fs from 'fs'; import http from 'http'; import https from 'https'; @@ -10,8 +11,20 @@ export { dgram, } -import * as dnsPacket from 'dns-packet'; +// @push.rocks scope +import * as smartpromise from '@push.rocks/smartpromise'; export { - dnsPacket + smartpromise, +} + +// third party +import * as elliptic from 'elliptic'; +import * as dnsPacket from 'dns-packet'; +import * as minimatch from 'minimatch'; + +export { + dnsPacket, + elliptic, + minimatch, }