From e6a138279def320e1faaa185937ae64039d9245d Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Thu, 1 May 2025 11:48:04 +0000 Subject: [PATCH] before refactor --- package.json | 4 +- pnpm-lock.yaml | 418 +++++++++++++++++++-- readme.plan.md | 31 ++ ts/networkproxy/classes.np.networkproxy.ts | 4 + ts/plugins.ts | 8 +- ts/port80handler/classes.port80handler.ts | 57 ++- 6 files changed, 475 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 381e462..d5d11ca 100644 --- a/package.json +++ b/package.json @@ -18,12 +18,13 @@ "@git.zone/tsbuild": "^2.3.2", "@git.zone/tsrun": "^1.2.44", "@git.zone/tstest": "^1.0.77", - "@push.rocks/tapbundle": "^6.0.0", + "@push.rocks/tapbundle": "^6.0.3", "@types/node": "^22.15.3", "typescript": "^5.8.3" }, "dependencies": { "@push.rocks/lik": "^6.2.2", + "@push.rocks/smartacme": "^7.2.3", "@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartnetwork": "^4.0.0", "@push.rocks/smartpromise": "^4.2.3", @@ -32,7 +33,6 @@ "@tsclass/tsclass": "^9.1.0", "@types/minimatch": "^5.1.2", "@types/ws": "^8.18.1", - "acme-client": "^5.4.0", "minimatch": "^10.0.1", "pretty-ms": "^9.2.0", "ws": "^8.18.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f2e3a4..4f4f935 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@push.rocks/lik': specifier: ^6.2.2 version: 6.2.2 + '@push.rocks/smartacme': + specifier: ^7.2.3 + version: 7.2.3(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4) '@push.rocks/smartdelay': specifier: ^3.0.5 version: 3.0.5 @@ -35,9 +38,6 @@ importers: '@types/ws': specifier: ^8.18.1 version: 8.18.1 - acme-client: - specifier: ^5.4.0 - version: 5.4.0 minimatch: specifier: ^10.0.1 version: 10.0.1 @@ -58,8 +58,8 @@ importers: specifier: ^1.0.77 version: 1.0.96(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)(typescript@5.8.3) '@push.rocks/tapbundle': - specifier: ^6.0.0 - version: 6.0.0(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4) + specifier: ^6.0.3 + version: 6.0.3(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4) '@types/node': specifier: ^22.15.3 version: 22.15.3 @@ -81,9 +81,15 @@ packages: '@api.global/typedserver@3.0.68': resolution: {integrity: sha512-7o6fkz60ed8q2lmEe44hsu/6kNqG4j5WVgWwmY+a1MmSOUtuu5+VTYYNyc8KrSgtbRBzx4+2A2N31l4wDjcy3w==} + '@api.global/typedserver@3.0.74': + resolution: {integrity: sha512-lrXaCPaVZLihlF9w39pEqTw2kiHFCheRKTZuK07S7gTGyfdXKPmccVR/EK4ox58E1gjh9A2K8yY8ZWGcjuSJkw==} + '@api.global/typedsocket@3.0.1': resolution: {integrity: sha512-xojiAVNXtHoxkpBo8U2HHJG8FrVXXuLvDNndSHXwx4C9VslUwDn5zSCI+PdBl8iAg+ZuBmKjqkpZZ9sL6DC5yQ==} + '@apiclient.xyz/cloudflare@6.4.1': + resolution: {integrity: sha512-RYFphnbunjK+Imq/3ynIQpAvIGBJ38kqSZ2nrpTm26zsBIxW7S6xEe3zhXfVMtUIgC99OL3Xr/SGXl3CNBwCug==} + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -346,6 +352,9 @@ packages: '@cloudflare/workers-types@4.20250303.0': resolution: {integrity: sha512-O7F7nRT4bbmwHf3gkRBLfJ7R6vHIJ/oZzWdby6obOiw2yavUfp/AIwS7aO2POu5Cv8+h3TXS3oHs3kKCZLraUA==} + '@cloudflare/workers-types@4.20250430.0': + resolution: {integrity: sha512-JWAX7ZhQ7KjkdJwASgG58MZ/pQ15brlnZ9/0YBwDQ0hrJ/LaK392aTRFlj2r/PRKDZ5dOuujRywNYaNpfeFiEA==} + '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} @@ -724,6 +733,9 @@ packages: '@lit/reactive-element@2.0.4': resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} + '@lit/reactive-element@2.1.0': + resolution: {integrity: sha512-L2qyoZSQClcBmq0qajBVbhYEcG6iK0XfLn66ifLe/RfC0/ihpc+pl0Wdn8bJ8o+hj38cG0fGXRgSS20MuXn7qA==} + '@mixmark-io/domino@2.2.0': resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} @@ -857,6 +869,9 @@ packages: '@push.rocks/qenv@6.1.0': resolution: {integrity: sha512-1FUFMlSVwFSFg8LbqfkzJ2LLP4lMGApUtgOpsvrde6+AxBmB4gjoNgCUH7z3xXfDAtYqcrtSELXBNE0xVL1MqQ==} + '@push.rocks/smartacme@7.2.3': + resolution: {integrity: sha512-PTwn/Zf7l+IMWqeiQ8mTxi7fdrtObQH13YzF65si/VxXTqHeZ7zvisLLKZcMEgSaOj1aQ/Ku83gaO8YqO4gDig==} + '@push.rocks/smartarchive@3.0.8': resolution: {integrity: sha512-1jPmR0b7hXmjYQoRiTlRXrIbZcdcFmSdGOfznufjcDpGPe86Km0d8TBnzqghTx4dTihzKC67IxAaz/DM3lvxpA==} @@ -887,6 +902,9 @@ packages: '@push.rocks/smartdelay@3.0.5': resolution: {integrity: sha512-mUuI7kj2f7ztjpic96FvRIlf2RsKBa5arw81AHNsndbxO6asRcxuWL8dTVxouEIK8YsBUlj0AsrCkHhMbLQdHw==} + '@push.rocks/smartdns@6.2.2': + resolution: {integrity: sha512-MhJcHujbyIuwIIFdnXb2OScGtRjNsliLUS8GoAurFsKtcCOaA0ytfP+PNzkukyBufjb1nMiJF3rjhswXdHakAQ==} + '@push.rocks/smartenv@5.0.12': resolution: {integrity: sha512-tDEFwywzq0FNzRYc9qY2dRl2pgQuZG0G2/yml2RLWZWSW+Fn1EHshnKOGHz8o77W7zvu4hTgQQX42r/JY5XHTg==} @@ -896,8 +914,8 @@ packages: '@push.rocks/smartexpect@1.6.1': resolution: {integrity: sha512-NFQXEPkGiMNxyvFwKyzDWe3ADYdf8KNvIcV7TGNZZT3uPQtk65te4Q+a1cWErjP/61yE9XdYiQA66QQp+TV9IQ==} - '@push.rocks/smartexpect@2.2.2': - resolution: {integrity: sha512-s2zJlLc6Wub7P/jgKSM51kW2UjslxQwx2BXoyJVO95OgiOwarde0AuxPR0lfRA/FvHdBfTmJf4upiWtcjYMB/Q==} + '@push.rocks/smartexpect@2.4.2': + resolution: {integrity: sha512-L+aS1n5rWhf/yOh5R3zPgwycYtDr5FfrDWgasy6ShhN6Zbn/z/AOPbWcF/OpeTmx0XabWB2h5d4xBcCKLl47cQ==} '@push.rocks/smartfeed@1.0.11': resolution: {integrity: sha512-02uhXxQamgfBo3T12FsAdfyElnpoWuDUb08B2AE60DbIaukVx/7Mi17xwobApY1flNSr5StZDt8N8vxPhBhIXw==} @@ -1043,8 +1061,8 @@ packages: '@push.rocks/tapbundle@5.6.3': resolution: {integrity: sha512-hFzsf59rg1K70i45llj7PCyyCZp7JW19XRR+Q1gge1T0pBN8Wi53aYqP/2qtxdMiNVe2s3ESp6VJZv3sLOMYPQ==} - '@push.rocks/tapbundle@6.0.0': - resolution: {integrity: sha512-ARIs189TysvI8EsPAC7LH6O0WbBYI9E7XxdihwmM6LRgLvzAbp1agfO6lOjpKrAYWKjT3KdlUEihilxOBrgTYQ==} + '@push.rocks/tapbundle@6.0.3': + resolution: {integrity: sha512-SuP14V6TPdtd1y1CYTvwTKJdpHa7EzY55NfaaEMxW4oRKvHgJiOiPEiR/IrtL9tSiDMSfrx12waTMgZheYaBug==} '@push.rocks/taskbuffer@3.1.7': resolution: {integrity: sha512-QktGVJPucqQmW/QNGnscf4FAigT1H7JWKFGFdRuDEaOHKFh9qN+PXG3QY7DtZ4jfXdGLxPN4yAufDuPSAJYFnw==} @@ -1540,6 +1558,9 @@ packages: '@tsclass/tsclass@4.4.4': resolution: {integrity: sha512-YZOAF+u+r4u5rCev2uUd1KBTBdfyFdtDmcv4wuN+864lMccbdfRICR3SlJwCfYS1lbeV3QNLYGD30wjRXgvCJA==} + '@tsclass/tsclass@5.0.0': + resolution: {integrity: sha512-2X66VCk0Oe1L01j6GQHC6F9Gj7lpZPPSUTDNax7e29lm4OqBTyAzTR3ePR8coSbWBwsmRV8awLRSrSI+swlqWA==} + '@tsclass/tsclass@8.2.1': resolution: {integrity: sha512-bRDCfJTipsTcK6eEokWdsOR1mGCQFeM7zTg6PRHzbxTWQcWQD9AhEr2q3CrPcmAbvIS7fvkO6/pU/mPm1MZxhQ==} @@ -1552,6 +1573,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==} @@ -1606,6 +1630,12 @@ packages: '@types/default-gateway@7.2.2': resolution: {integrity: sha512-35C93fYQlnLKLASkMPoxRvok4fENwB3By9clRLd2I/08n/XRl0pCdf7EB17K5oMMwZu8NBYA8i66jH5r/LYBKA==} + '@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.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} @@ -1618,6 +1648,9 @@ packages: '@types/express@5.0.0': resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + '@types/express@5.0.1': + resolution: {integrity: sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==} + '@types/fast-json-stable-stringify@2.1.2': resolution: {integrity: sha512-vsxcbfLDdjytnCnHXtinE40Xl46Wr7l/VGRGt7ewJwCPMKEHOdEsTxXX8xwgoR7cbc+6dE8SB4jlMrOV2zAg7g==} deprecated: This is a stub types definition. fast-json-stable-stringify provides its own type definitions, so you do not need this installed. @@ -1700,9 +1733,15 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/node@18.19.87': + resolution: {integrity: sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==} + '@types/node@22.15.3': resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} @@ -1825,6 +1864,10 @@ packages: resolution: {integrity: sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==} engines: {node: '>=18.0.0'} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -1890,8 +1933,8 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - asn1js@3.0.5: - resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + asn1js@3.0.6: + resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==} engines: {node: '>=12.0.0'} ast-types@0.13.4: @@ -1915,8 +1958,8 @@ packages: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} - axios@1.8.2: - resolution: {integrity: sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==} + axios@1.9.0: + resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -1963,6 +2006,9 @@ packages: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} + bn.js@4.12.2: + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -1983,6 +2029,9 @@ packages: broadcast-channel@7.0.0: resolution: {integrity: sha512-a2tW0Ia1pajcPBOGUF2jXlDnvE9d5/dg6BG9h60OmRUcZVr/veUrU8vEQFwwQIhwG3KVzYwSk3v2nRRGFgQDXQ==} + brorand@1.1.0: + resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} + browserify-zlib@0.1.4: resolution: {integrity: sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=} @@ -2120,6 +2169,9 @@ packages: resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=} engines: {node: '>=0.8'} + cloudflare@4.2.0: + resolution: {integrity: sha512-L9IainZq+7PN3NG/Mg7T9oRm7SB7AskNe6QLD8j7FrJY+2Dn1qpeLqXF8Im04ANnssezf0KAOtSuxNAAyNEgkg==} + co-body@6.2.0: resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==} engines: {node: '>=8.0.0'} @@ -2389,6 +2441,9 @@ packages: ee-first@1.1.1: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2515,6 +2570,10 @@ packages: resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} engines: {node: '>= 0.6'} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -2635,6 +2694,9 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} @@ -2647,6 +2709,10 @@ packages: resolution: {integrity: sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=} engines: {node: '>=0.4.x'} + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -2785,6 +2851,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'} @@ -2802,6 +2871,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==} @@ -3148,12 +3220,21 @@ packages: lit-element@4.1.1: resolution: {integrity: sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==} + lit-element@4.2.0: + resolution: {integrity: sha512-MGrXJVAI5x+Bfth/pU9Kst1iWID6GHDLEzFEnyULB/sFiRLgkd8NPK/PeeXxktA3T6EIIaq8U3KcbTU5XFcP2Q==} + lit-html@3.2.1: resolution: {integrity: sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==} + lit-html@3.3.0: + resolution: {integrity: sha512-RHoswrFAxY2d8Cf2mm4OZ1DgzCoBKUKSPvA1fhtSELxUERq2aQQ2h05pO9j81gS1o7RIRJ+CePLogfyahwmynw==} + lit@3.2.1: resolution: {integrity: sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==} + lit@3.3.0: + resolution: {integrity: sha512-DGVsqsOIHBww2DqnuZzW7QsuCdahp50ojuDaBPC7jUDRpYoH0z7kHBBYZewRzer75FwtrkmkKk7iOAwSaWdBmw==} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3447,6 +3528,12 @@ 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} @@ -3564,6 +3651,19 @@ packages: no-case@2.3.2: resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -4265,6 +4365,9 @@ packages: resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} engines: {node: '>=14.16'} + tr46@0.0.3: + resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} + tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} @@ -4302,8 +4405,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - tsyringe@4.8.0: - resolution: {integrity: sha512-YB1FG+axdxADa3ncEtRnQCFq/M0lALGLxSZeVNbTU8NqhOVc51nnv2CISTcvc1kyv6EGPtXVr0v6lWeDxiijOA==} + tsyringe@4.10.0: + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} engines: {node: '>= 6.0.0'} turndown-plugin-gfm@1.0.2: @@ -4354,6 +4457,9 @@ packages: resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} engines: {node: '>=18'} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -4418,6 +4524,13 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -4434,6 +4547,9 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} + whatwg-url@5.0.0: + resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4636,6 +4752,53 @@ snapshots: - utf-8-validate - vue + '@api.global/typedserver@3.0.74': + dependencies: + '@api.global/typedrequest': 3.1.10 + '@api.global/typedrequest-interfaces': 3.0.19 + '@api.global/typedsocket': 3.0.1 + '@cloudflare/workers-types': 4.20250430.0 + '@design.estate/dees-comms': 1.0.27 + '@push.rocks/lik': 6.2.2 + '@push.rocks/smartchok': 1.0.34 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartfeed': 1.0.11 + '@push.rocks/smartfile': 11.2.0 + '@push.rocks/smartjson': 5.0.20 + '@push.rocks/smartlog': 3.0.7 + '@push.rocks/smartlog-destination-devtools': 1.0.12 + '@push.rocks/smartlog-interfaces': 3.0.2 + '@push.rocks/smartmanifest': 2.0.2 + '@push.rocks/smartmatch': 2.0.0 + '@push.rocks/smartmime': 2.0.4 + '@push.rocks/smartntml': 2.0.8 + '@push.rocks/smartopen': 2.0.0 + '@push.rocks/smartpath': 5.0.18 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartrequest': 2.1.0 + '@push.rocks/smartrx': 3.0.10 + '@push.rocks/smartsitemap': 2.0.3 + '@push.rocks/smartstream': 3.2.5 + '@push.rocks/smarttime': 4.1.1 + '@push.rocks/taskbuffer': 3.1.7 + '@push.rocks/webrequest': 3.0.37 + '@push.rocks/webstore': 2.0.20 + '@tsclass/tsclass': 8.2.1 + '@types/express': 5.0.1 + body-parser: 1.20.3 + cors: 2.8.5 + express: 4.21.2 + express-force-ssl: 0.3.2 + lit: 3.3.0 + transitivePeerDependencies: + - '@nuxt/kit' + - bufferutil + - react + - supports-color + - utf-8-validate + - vue + '@api.global/typedsocket@3.0.1': dependencies: '@api.global/typedrequest': 3.1.10 @@ -4654,6 +4817,18 @@ snapshots: - utf-8-validate - vue + '@apiclient.xyz/cloudflare@6.4.1': + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartlog': 3.0.7 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartrequest': 2.1.0 + '@push.rocks/smartstring': 4.0.15 + '@tsclass/tsclass': 9.1.0 + cloudflare: 4.2.0 + transitivePeerDependencies: + - encoding + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -5493,6 +5668,8 @@ snapshots: '@cloudflare/workers-types@4.20250303.0': {} + '@cloudflare/workers-types@4.20250430.0': {} + '@colors/colors@1.6.0': {} '@configvault.io/interfaces@1.0.17': @@ -5839,6 +6016,10 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 + '@lit/reactive-element@2.1.0': + dependencies: + '@lit-labs/ssr-dom-shim': 1.3.0 + '@mixmark-io/domino@2.2.0': {} '@mongodb-js/saslprep@1.2.2': @@ -5922,21 +6103,21 @@ snapshots: '@peculiar/asn1-schema': 2.3.15 '@peculiar/asn1-x509': 2.3.15 '@peculiar/asn1-x509-attr': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 tslib: 2.8.1 '@peculiar/asn1-csr@2.3.15': dependencies: '@peculiar/asn1-schema': 2.3.15 '@peculiar/asn1-x509': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 tslib: 2.8.1 '@peculiar/asn1-ecc@2.3.15': dependencies: '@peculiar/asn1-schema': 2.3.15 '@peculiar/asn1-x509': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 tslib: 2.8.1 '@peculiar/asn1-pfx@2.3.15': @@ -5945,14 +6126,14 @@ snapshots: '@peculiar/asn1-pkcs8': 2.3.15 '@peculiar/asn1-rsa': 2.3.15 '@peculiar/asn1-schema': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 tslib: 2.8.1 '@peculiar/asn1-pkcs8@2.3.15': dependencies: '@peculiar/asn1-schema': 2.3.15 '@peculiar/asn1-x509': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 tslib: 2.8.1 '@peculiar/asn1-pkcs9@2.3.15': @@ -5963,19 +6144,19 @@ snapshots: '@peculiar/asn1-schema': 2.3.15 '@peculiar/asn1-x509': 2.3.15 '@peculiar/asn1-x509-attr': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 tslib: 2.8.1 '@peculiar/asn1-rsa@2.3.15': dependencies: '@peculiar/asn1-schema': 2.3.15 '@peculiar/asn1-x509': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 tslib: 2.8.1 '@peculiar/asn1-schema@2.3.15': dependencies: - asn1js: 3.0.5 + asn1js: 3.0.6 pvtsutils: 1.3.6 tslib: 2.8.1 @@ -5983,13 +6164,13 @@ snapshots: dependencies: '@peculiar/asn1-schema': 2.3.15 '@peculiar/asn1-x509': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 tslib: 2.8.1 '@peculiar/asn1-x509@2.3.15': dependencies: '@peculiar/asn1-schema': 2.3.15 - asn1js: 3.0.5 + asn1js: 3.0.6 pvtsutils: 1.3.6 tslib: 2.8.1 @@ -6005,7 +6186,7 @@ snapshots: pvtsutils: 1.3.6 reflect-metadata: 0.2.2 tslib: 2.8.1 - tsyringe: 4.8.0 + tsyringe: 4.10.0 '@pkgjs/parseargs@0.11.0': optional: true @@ -6100,6 +6281,39 @@ snapshots: '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartpath': 5.0.18 + '@push.rocks/smartacme@7.2.3(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)': + dependencies: + '@api.global/typedserver': 3.0.74 + '@apiclient.xyz/cloudflare': 6.4.1 + '@push.rocks/lik': 6.2.2 + '@push.rocks/smartdata': 5.15.1(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4) + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartdns': 6.2.2 + '@push.rocks/smartlog': 3.0.7 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartrequest': 2.1.0 + '@push.rocks/smartstring': 4.0.15 + '@push.rocks/smarttime': 4.1.1 + '@push.rocks/smartunique': 3.0.9 + '@tsclass/tsclass': 9.1.0 + acme-client: 5.4.0 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - '@nuxt/kit' + - aws-crt + - bufferutil + - encoding + - gcp-metadata + - kerberos + - mongodb-client-encryption + - react + - snappy + - socks + - supports-color + - utf-8-validate + - vue + '@push.rocks/smartarchive@3.0.8': dependencies: '@push.rocks/smartfile': 10.0.41 @@ -6205,6 +6419,22 @@ snapshots: dependencies: '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartdns@6.2.2': + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartrequest': 2.1.0 + '@tsclass/tsclass': 5.0.0 + '@types/dns-packet': 5.6.5 + '@types/elliptic': 6.4.18 + acme-client: 5.4.0 + dns-packet: 5.6.1 + elliptic: 6.6.1 + minimatch: 10.0.1 + transitivePeerDependencies: + - supports-color + '@push.rocks/smartenv@5.0.12': dependencies: '@push.rocks/smartpromise': 4.2.3 @@ -6222,7 +6452,7 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 fast-deep-equal: 3.1.3 - '@push.rocks/smartexpect@2.2.2': + '@push.rocks/smartexpect@2.4.2': dependencies: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartpromise': 4.2.3 @@ -6652,7 +6882,7 @@ snapshots: - supports-color - utf-8-validate - '@push.rocks/tapbundle@6.0.0(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)': + '@push.rocks/tapbundle@6.0.3(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)': dependencies: '@open-wc/testing': 4.0.0 '@push.rocks/consolecolor': 2.0.2 @@ -6660,7 +6890,7 @@ snapshots: '@push.rocks/smartcrypto': 2.0.4 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartenv': 5.0.12 - '@push.rocks/smartexpect': 2.2.2 + '@push.rocks/smartexpect': 2.4.2 '@push.rocks/smartfile': 11.2.0 '@push.rocks/smartjson': 5.0.20 '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4) @@ -7495,6 +7725,10 @@ snapshots: dependencies: type-fest: 4.37.0 + '@tsclass/tsclass@5.0.0': + dependencies: + type-fest: 4.40.1 + '@tsclass/tsclass@8.2.1': dependencies: type-fest: 4.40.1 @@ -7509,6 +7743,10 @@ snapshots: '@types/babel__code-frame@7.0.6': {} + '@types/bn.js@5.1.6': + dependencies: + '@types/node': 22.15.3 + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 @@ -7569,6 +7807,14 @@ snapshots: '@types/default-gateway@7.2.2': {} + '@types/dns-packet@5.6.5': + dependencies: + '@types/node': 22.15.3 + + '@types/elliptic@6.4.18': + dependencies: + '@types/bn.js': 5.1.6 + '@types/express-serve-static-core@4.19.6': dependencies: '@types/node': 22.15.3 @@ -7597,6 +7843,12 @@ snapshots: '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 + '@types/express@5.0.1': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 5.0.6 + '@types/serve-static': 1.15.7 + '@types/fast-json-stable-stringify@2.1.2': dependencies: fast-json-stable-stringify: 2.1.0 @@ -7693,10 +7945,19 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node-fetch@2.6.12': + dependencies: + '@types/node': 22.15.3 + form-data: 4.0.2 + '@types/node-forge@1.3.11': dependencies: '@types/node': 22.15.3 + '@types/node@18.19.87': + dependencies: + undici-types: 5.26.5 + '@types/node@22.15.3': dependencies: undici-types: 6.21.0 @@ -7877,6 +8138,10 @@ snapshots: - supports-color - utf-8-validate + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -7885,8 +8150,8 @@ snapshots: acme-client@5.4.0: dependencies: '@peculiar/x509': 1.12.3 - asn1js: 3.0.5 - axios: 1.8.2(debug@4.4.0) + asn1js: 3.0.6 + axios: 1.9.0(debug@4.4.0) debug: 4.4.0 node-forge: 1.3.1 transitivePeerDependencies: @@ -7935,7 +8200,7 @@ snapshots: array-union@2.1.0: {} - asn1js@3.0.5: + asn1js@3.0.6: dependencies: pvtsutils: 1.3.6 pvutils: 1.1.3 @@ -7957,7 +8222,7 @@ snapshots: axe-core@4.10.3: {} - axios@1.8.2(debug@4.4.0): + axios@1.9.0(debug@4.4.0): dependencies: follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.2 @@ -8004,6 +8269,8 @@ snapshots: basic-ftp@5.0.5: {} + bn.js@4.12.2: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -8043,6 +8310,8 @@ snapshots: p-queue: 6.6.2 unload: 2.4.1 + brorand@1.1.0: {} + browserify-zlib@0.1.4: dependencies: pako: 0.2.9 @@ -8181,6 +8450,18 @@ snapshots: clone@2.1.2: {} + cloudflare@4.2.0: + dependencies: + '@types/node': 18.19.87 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + co-body@6.2.0: dependencies: '@hapi/bourne': 3.0.0 @@ -8407,6 +8688,16 @@ snapshots: ee-first@1.1.1: {} + elliptic@6.6.1: + dependencies: + bn.js: 4.12.2 + 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: {} @@ -8567,6 +8858,8 @@ snapshots: etag@1.8.1: {} + event-target-shim@5.0.1: {} + eventemitter3@4.0.7: {} execa@5.1.1: @@ -8743,6 +9036,8 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + form-data-encoder@1.7.2: {} + form-data-encoder@2.1.4: {} form-data@4.0.2: @@ -8754,6 +9049,11 @@ snapshots: format@0.2.2: {} + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + forwarded@0.2.0: {} fresh@0.5.2: {} @@ -8940,6 +9240,11 @@ snapshots: dependencies: has-symbols: 1.1.0 + 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 @@ -8970,6 +9275,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: @@ -9341,16 +9652,32 @@ snapshots: '@lit/reactive-element': 2.0.4 lit-html: 3.2.1 + lit-element@4.2.0: + dependencies: + '@lit-labs/ssr-dom-shim': 1.3.0 + '@lit/reactive-element': 2.1.0 + lit-html: 3.3.0 + lit-html@3.2.1: dependencies: '@types/trusted-types': 2.0.7 + lit-html@3.3.0: + dependencies: + '@types/trusted-types': 2.0.7 + lit@3.2.1: dependencies: '@lit/reactive-element': 2.0.4 lit-element: 4.1.1 lit-html: 3.2.1 + lit@3.3.0: + dependencies: + '@lit/reactive-element': 2.1.0 + lit-element: 4.2.0 + lit-html: 3.3.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -9812,6 +10139,10 @@ 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 @@ -9935,6 +10266,12 @@ snapshots: dependencies: lower-case: 1.1.4 + node-domexception@1.0.0: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-forge@1.3.1: {} normalize-newline@4.1.0: @@ -10753,6 +11090,8 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + tr46@0.0.3: {} + tr46@3.0.0: dependencies: punycode: 2.3.1 @@ -10782,7 +11121,7 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - tsyringe@4.8.0: + tsyringe@4.10.0: dependencies: tslib: 1.14.1 @@ -10815,6 +11154,8 @@ snapshots: uint8array-extras@1.4.0: {} + undici-types@5.26.5: {} + undici-types@6.21.0: {} unified@11.0.5: @@ -10883,6 +11224,10 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 + web-streams-polyfill@4.0.0-beta.3: {} + + webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} whatwg-mimetype@3.0.0: {} @@ -10897,6 +11242,11 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which@2.0.2: dependencies: isexe: 2.0.0 diff --git a/readme.plan.md b/readme.plan.md index e69de29..460e302 100644 --- a/readme.plan.md +++ b/readme.plan.md @@ -0,0 +1,31 @@ +## Plan: Integrate @push.rocks/smartacme into Port80Handler + +- [ ] read the complete README of @push.rocks/smartacme and understand the API. +- [ ] Add imports to ts/plugins.ts: + - import * as smartacme from '@push.rocks/smartacme'; + - export { smartacme }; +- [ ] In Port80Handler.start(): + - Instantiate SmartAcme and use the in memory certmanager. + - use the DisklessHttp01Handler implemented in classes.port80handler.ts + - Call `await smartAcme.start()` before binding HTTP server. +- [ ] Replace old ACME flow in `obtainCertificate()` to use `await smartAcme.getCertificateForDomain(domain)` and process returned cert object. Remove old code. +- [ ] Update `handleRequest()` to let DisklessHttp01Handler serve challenges. +- [ ] Remove legacy methods: `getAcmeClient()`, `handleAcmeChallenge()`, `processAuthorizations()`, and related token bookkeeping in domainInfo. + +## Plan: Certificate Provider Hook & Observable Emission + +- [ ] Extend IPortProxySettings (ts/smartproxy/classes.pp.interfaces.ts): + - Define type ISmartProxyCertProvisionObject = tsclass.network.ICert | 'http01'`. + - Add optional `certProvider?: (domain: string) => Promise`. +- [ ] Enhance SmartProxy (ts/smartproxy/classes.smartproxy.ts): + - Import `EventEmitter` and change class signature to `export class SmartProxy extends EventEmitter`. + - Call `super()` in constructor. + - In `initializePort80Handler` and `updateDomainConfigs`, for each non-wildcard domain: + - Invoke `certProvider(domain)` if provided, defaulting to `'http01'`. + - If result is `'http01'`, register domain with `Port80Handler` for ACME challenges. + - If static cert returned, bypass `Port80Handler`, apply via `NetworkProxyBridge` + - Subscribe to `Port80HandlerEvents.CERTIFICATE_ISSUED` and `CERTIFICATE_RENEWED` and re-emit on `SmartProxy` as `'certificate'` events (include `domain`, `publicKey`, `privateKey`, `expiryDate`, `source: 'http01'`, `isRenewal` flag). +- [ ] Extend NetworkProxyBridge (ts/smartproxy/classes.pp.networkproxybridge.ts): + - Add public method `applyExternalCertificate(data: ICertificateData): void` to forward static certs into `NetworkProxy`. +- [ ] Define `SmartProxy` `'certificate'` event interface in TypeScript and update documentation. +- [ ] Update README with usage examples showing `certProvider` callback and listening for `'certificate'` events. diff --git a/ts/networkproxy/classes.np.networkproxy.ts b/ts/networkproxy/classes.np.networkproxy.ts index 602d78f..f203157 100644 --- a/ts/networkproxy/classes.np.networkproxy.ts +++ b/ts/networkproxy/classes.np.networkproxy.ts @@ -12,6 +12,10 @@ import { Port80Handler } from '../port80handler/classes.port80handler.js'; * automatic certificate management, and high-performance connection pooling. */ export class NetworkProxy implements IMetricsTracker { + // Provide a minimal JSON representation to avoid circular references during deep equality checks + public toJSON(): any { + return {}; + } // Configuration public options: INetworkProxyOptions; public proxyConfigs: IReverseProxyConfig[] = []; diff --git a/ts/plugins.ts b/ts/plugins.ts index 5e5014d..42e0aeb 100644 --- a/ts/plugins.ts +++ b/ts/plugins.ts @@ -22,13 +22,15 @@ import * as smartpromise from '@push.rocks/smartpromise'; import * as smartrequest from '@push.rocks/smartrequest'; import * as smartstring from '@push.rocks/smartstring'; -export { lik, smartdelay, smartrequest, smartpromise, smartstring }; +import * as smartacme from '@push.rocks/smartacme'; +import * as smartacmePlugins from '@push.rocks/smartacme/dist_ts/smartacme.plugins.js'; +import * as smartacmeHandlers from '@push.rocks/smartacme/dist_ts/handlers/index.js'; +export { lik, smartdelay, smartrequest, smartpromise, smartstring, smartacme, smartacmePlugins, smartacmeHandlers }; // third party scope -import * as acme from 'acme-client'; import prettyMs from 'pretty-ms'; import * as ws from 'ws'; import wsDefault from 'ws'; import { minimatch } from 'minimatch'; -export { acme, prettyMs, ws, wsDefault, minimatch }; +export { prettyMs, ws, wsDefault, minimatch }; diff --git a/ts/port80handler/classes.port80handler.ts b/ts/port80handler/classes.port80handler.ts index 87a8940..c033311 100644 --- a/ts/port80handler/classes.port80handler.ts +++ b/ts/port80handler/classes.port80handler.ts @@ -2,6 +2,21 @@ import * as plugins from '../plugins.js'; import { IncomingMessage, ServerResponse } from 'http'; import * as fs from 'fs'; import * as path from 'path'; +// ACME HTTP-01 challenge handler storing tokens in memory (diskless) +class DisklessHttp01Handler { + private storage: Map; + constructor(storage: Map) { this.storage = storage; } + public getSupportedTypes(): string[] { return ['http-01']; } + public async prepare(ch: any): Promise { + this.storage.set(ch.token, ch.keyAuthorization); + } + public async verify(ch: any): Promise { + return; + } + public async cleanup(ch: any): Promise { + this.storage.delete(ch.token); + } +} /** * Custom error classes for better error handling @@ -79,6 +94,7 @@ interface IPort80HandlerOptions { autoRenew?: boolean; // Whether to automatically renew certificates certificateStore?: string; // Directory to store certificates skipConfiguredCerts?: boolean; // Skip domains that already have certificates + mongoDescriptor?: plugins.smartdata.IMongoDescriptor; // MongoDB config for SmartAcme } /** @@ -128,6 +144,10 @@ export interface ICertificateExpiring { */ export class Port80Handler extends plugins.EventEmitter { private domainCertificates: Map; + // In-memory storage for ACME HTTP-01 challenge tokens + private acmeHttp01Storage: Map = new Map(); + // SmartAcme instance for certificate management + private smartAcme: plugins.smartacme.SmartAcme | null = null; private server: plugins.http.Server | null = null; private acmeClient: plugins.acme.Client | null = null; private accountKey: string | null = null; @@ -175,6 +195,20 @@ export class Port80Handler extends plugins.EventEmitter { console.log('Port80Handler is disabled, skipping start'); return; } + // Initialize SmartAcme for ACME challenge management (diskless HTTP handler) + if (this.options.enabled) { + if (!this.options.mongoDescriptor) { + throw new ServerError('MongoDB descriptor is required for SmartAcme'); + } + this.smartAcme = new plugins.smartacme.SmartAcme({ + accountEmail: this.options.contactEmail, + environment: this.options.useProduction ? 'production' : 'integration', + mongoDescriptor: this.options.mongoDescriptor, + challengeHandlers: [ new DisklessHttp01Handler(this.acmeHttp01Storage) ], + challengePriority: ['http-01'], + }); + await this.smartAcme.start(); + } return new Promise((resolve, reject) => { try { @@ -640,19 +674,26 @@ export class Port80Handler extends plugins.EventEmitter { const { domainInfo, pattern } = domainMatch; const options = domainInfo.options; - // If the request is for an ACME HTTP-01 challenge, handle it - if (req.url && req.url.startsWith('/.well-known/acme-challenge/') && (options.acmeMaintenance || options.acmeForward)) { - // Check if we should forward ACME requests + // Serve or forward ACME HTTP-01 challenge requests + if (req.url && req.url.startsWith('/.well-known/acme-challenge/') && options.acmeMaintenance) { + // Forward ACME requests if configured if (options.acmeForward) { this.forwardRequest(req, res, options.acmeForward, 'ACME challenge'); return; } - - // Only handle ACME challenges for non-glob patterns - if (!this.isGlobPattern(pattern)) { - this.handleAcmeChallenge(req, res, domain); - return; + // Serve challenge response from in-memory storage + const token = req.url.split('/').pop() || ''; + const keyAuth = this.acmeHttp01Storage.get(token); + if (keyAuth) { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end(keyAuth); + console.log(`Served ACME challenge response for ${domain}`); + } else { + res.statusCode = 404; + res.end('Challenge token not found'); } + return; } // Check if we should forward non-ACME requests