diff --git a/.env.example b/.env.example index e6cd6a8..abbb664 100644 --- a/.env.example +++ b/.env.example @@ -14,7 +14,7 @@ BLOSSOM_SERVERS=https://nostr.download,https://cdn.satellite.earth # The max file size to serve MAX_FILE_SIZE='2 MB' -# The cache folder for nginx +# The cache folder for nginx (used for cache invalidation) NGINX_CACHE_DIR='/var/nginx/cache' # A nprofile pointer for an nsite to use as the default homepage diff --git a/package.json b/package.json index ea2f343..6c2baf7 100644 --- a/package.json +++ b/package.json @@ -19,32 +19,32 @@ "public" ], "dependencies": { - "@keyv/redis": "^3.0.1", + "@keyv/redis": "^4.3.2", "@keyv/sqlite": "^4.0.1", "@koa/cors": "^5.0.0", - "blossom-client-sdk": "^2.1.1", + "blossom-client-sdk": "^3.0.1", "debug": "^4.4.0", "dotenv": "^16.4.7", "follow-redirects": "^1.15.9", - "keyv": "^5.2.3", - "koa": "^2.15.3", + "keyv": "^5.3.2", + "koa": "^2.16.0", "koa-morgan": "^1.0.1", "koa-send": "^5.0.1", "koa-static": "^5.0.0", "mime": "^4.0.6", - "nostr-tools": "^2.10.4", - "nsite-cli": "^0.1.14", - "pac-proxy-agent": "^7.1.0", + "nostr-tools": "^2.11.0", + "nsite-cli": "^0.1.16", + "pac-proxy-agent": "^7.2.0", "proxy-agent": "^6.5.0", "puppeteer": "^23.11.1", "websocket-polyfill": "1.0.0", - "ws": "^8.18.0", + "ws": "^8.18.1", "xbytes": "^1.9.1" }, "devDependencies": { - "@changesets/cli": "^2.27.11", - "@swc-node/register": "^1.10.9", - "@swc/core": "^1.10.9", + "@changesets/cli": "^2.28.1", + "@swc-node/register": "^1.10.10", + "@swc/core": "^1.11.10", "@types/better-sqlite3": "^7.6.12", "@types/debug": "^4.1.12", "@types/follow-redirects": "^1.14.4", @@ -54,12 +54,12 @@ "@types/koa-static": "^4.0.4", "@types/koa__cors": "^5.0.0", "@types/koa__router": "^12.0.4", - "@types/node": "^20.17.14", + "@types/node": "^20.17.24", "@types/proxy-from-env": "^1.0.4", - "@types/ws": "^8.5.13", + "@types/ws": "^8.18.0", "nodemon": "^3.1.9", - "prettier": "^3.4.2", - "typescript": "^5.7.3" + "prettier": "^3.5.3", + "typescript": "^5.8.2" }, "resolutions": { "websocket-polyfill": "1.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e06ba33..d875a71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: .: dependencies: '@keyv/redis': - specifier: ^3.0.1 - version: 3.0.1 + specifier: ^4.3.2 + version: 4.3.2 '@keyv/sqlite': specifier: ^4.0.1 version: 4.0.1 @@ -21,8 +21,8 @@ importers: specifier: ^5.0.0 version: 5.0.0 blossom-client-sdk: - specifier: ^2.1.1 - version: 2.1.1 + specifier: ^3.0.1 + version: 3.0.1 debug: specifier: ^4.4.0 version: 4.4.0(supports-color@5.5.0) @@ -33,11 +33,11 @@ importers: specifier: ^1.15.9 version: 1.15.9(debug@4.4.0) keyv: - specifier: ^5.2.3 - version: 5.2.3 + specifier: ^5.3.2 + version: 5.3.2 koa: - specifier: ^2.15.3 - version: 2.15.3 + specifier: ^2.16.0 + version: 2.16.0 koa-morgan: specifier: ^1.0.1 version: 1.0.1 @@ -51,39 +51,39 @@ importers: specifier: ^4.0.6 version: 4.0.6 nostr-tools: - specifier: ^2.10.4 - version: 2.10.4(typescript@5.7.3) + specifier: ^2.11.0 + version: 2.11.0(typescript@5.8.2) nsite-cli: - specifier: ^0.1.14 - version: 0.1.14(@types/node@20.17.14)(typescript@5.7.3) + specifier: ^0.1.16 + version: 0.1.16(@types/node@20.17.24)(typescript@5.8.2) pac-proxy-agent: - specifier: ^7.1.0 - version: 7.1.0 + specifier: ^7.2.0 + version: 7.2.0 proxy-agent: specifier: ^6.5.0 version: 6.5.0 puppeteer: specifier: ^23.11.1 - version: 23.11.1(typescript@5.7.3) + version: 23.11.1(typescript@5.8.2) websocket-polyfill: specifier: 1.0.0 version: 1.0.0 ws: - specifier: ^8.18.0 - version: 8.18.0 + specifier: ^8.18.1 + version: 8.18.1 xbytes: specifier: ^1.9.1 version: 1.9.1 devDependencies: '@changesets/cli': - specifier: ^2.27.11 - version: 2.27.11 + specifier: ^2.28.1 + version: 2.28.1 '@swc-node/register': - specifier: ^1.10.9 - version: 1.10.9(@swc/core@1.10.9)(@swc/types@0.1.17)(typescript@5.7.3) + specifier: ^1.10.10 + version: 1.10.10(@swc/core@1.11.10)(@swc/types@0.1.19)(typescript@5.8.2) '@swc/core': - specifier: ^1.10.9 - version: 1.10.9 + specifier: ^1.11.10 + version: 1.11.10 '@types/better-sqlite3': specifier: ^7.6.12 version: 7.6.12 @@ -112,23 +112,23 @@ importers: specifier: ^12.0.4 version: 12.0.4 '@types/node': - specifier: ^20.17.14 - version: 20.17.14 + specifier: ^20.17.24 + version: 20.17.24 '@types/proxy-from-env': specifier: ^1.0.4 version: 1.0.4 '@types/ws': - specifier: ^8.5.13 - version: 8.5.13 + specifier: ^8.18.0 + version: 8.18.0 nodemon: specifier: ^3.1.9 version: 3.1.9 prettier: - specifier: ^3.4.2 - version: 3.4.2 + specifier: ^3.5.3 + version: 3.5.3 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 packages: @@ -140,40 +140,40 @@ packages: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + '@babel/runtime@7.26.10': + resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} engines: {node: '>=6.9.0'} - '@cashu/cashu-ts@2.1.0': - resolution: {integrity: sha512-qFfFz1dx9keJxumjk5FyTvI1j0Yp/P5LXDy0cGO4Xlp3WYKOI1nykNOTPd+bTY9vSkvIM+xuXRer9BtQxqHtwA==} + '@cashu/cashu-ts@2.2.2': + resolution: {integrity: sha512-s4DRaIZOh2MC0qi0G1Te4KfOzzw91EZiIVupssKDmaPSUbT1ggLonj5qyzB4OCpI7uZ4lDpnxh43xkRZyAqotw==} '@cashu/crypto@0.3.4': resolution: {integrity: sha512-mfv1Pj4iL1PXzUj9NKIJbmncCLMqYfnEDqh/OPxAX0nNBt6BOnVJJLjLWFlQeYxlnEfWABSNkrqPje1t5zcyhA==} - '@changesets/apply-release-plan@7.0.7': - resolution: {integrity: sha512-qnPOcmmmnD0MfMg9DjU1/onORFyRpDXkMMl2IJg9mECY6RnxL3wN0TCCc92b2sXt1jt8DgjAUUsZYGUGTdYIXA==} + '@changesets/apply-release-plan@7.0.10': + resolution: {integrity: sha512-wNyeIJ3yDsVspYvHnEz1xQDq18D9ifed3lI+wxRQRK4pArUcuHgCTrHv0QRnnwjhVCQACxZ+CBih3wgOct6UXw==} - '@changesets/assemble-release-plan@6.0.5': - resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} + '@changesets/assemble-release-plan@6.0.6': + resolution: {integrity: sha512-Frkj8hWJ1FRZiY3kzVCKzS0N5mMwWKwmv9vpam7vt8rZjLL1JMthdh6pSDVSPumHPshTTkKZ0VtNbE0cJHZZUg==} - '@changesets/changelog-git@0.2.0': - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@changesets/cli@2.27.11': - resolution: {integrity: sha512-1QislpE+nvJgSZZo9+Lj3Lno5pKBgN46dAV8IVxKJy9wX8AOrs9nn5pYVZuDpoxWJJCALmbfOsHkyxujgetQSg==} + '@changesets/cli@2.28.1': + resolution: {integrity: sha512-PiIyGRmSc6JddQJe/W1hRPjiN4VrMvb2VfQ6Uydy2punBioQrsxppyG5WafinKcW1mT0jOe/wU4k9Zy5ff21AA==} hasBin: true - '@changesets/config@3.0.5': - resolution: {integrity: sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==} + '@changesets/config@3.1.1': + resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@changesets/get-dependents-graph@2.1.2': - resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} + '@changesets/get-dependents-graph@2.1.3': + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} - '@changesets/get-release-plan@4.0.6': - resolution: {integrity: sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==} + '@changesets/get-release-plan@4.0.8': + resolution: {integrity: sha512-MM4mq2+DQU1ZT7nqxnpveDMTkMBLnwNX44cX7NSxlXmr7f8hO6/S2MXNiXG54uf/0nYnefv0cfy4Czf/ZL/EKQ==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} @@ -184,26 +184,26 @@ packages: '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - '@changesets/parse@0.4.0': - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + '@changesets/parse@0.4.1': + resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} - '@changesets/pre@2.0.1': - resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} - '@changesets/read@0.6.2': - resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} + '@changesets/read@0.6.3': + resolution: {integrity: sha512-9H4p/OuJ3jXEUTjaVGdQEhBdqoT2cO5Ts95JTFsQyawmKzpL8FnIeJSyhTDPW1MBRDnwZlHFEM9SpPwJDY5wIg==} - '@changesets/should-skip-package@0.1.1': - resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - '@changesets/types@6.0.0': - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} - '@changesets/write@0.3.2': - resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} '@emnapi/core@1.3.1': resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} @@ -217,103 +217,141 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - '@inquirer/checkbox@4.0.6': - resolution: {integrity: sha512-PgP35JfmGjHU0LSXOyRew0zHuA9N6OJwOlos1fZ20b7j8ISeAdib3L+n0jIxBtX958UeEpte6xhG/gxJ5iUqMw==} + '@inquirer/checkbox@4.1.4': + resolution: {integrity: sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/confirm@5.1.3': - resolution: {integrity: sha512-fuF9laMmHoOgWapF9h9hv6opA5WvmGFHsTYGCmuFxcghIhEhb3dN0CdQR4BUMqa2H506NCj8cGX4jwMsE4t6dA==} + '@inquirer/confirm@5.1.8': + resolution: {integrity: sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/core@10.1.4': - resolution: {integrity: sha512-5y4/PUJVnRb4bwWY67KLdebWOhOc7xj5IP2J80oWXa64mVag24rwQ1VAdnj7/eDY/odhguW0zQ1Mp1pj6fO/2w==} + '@inquirer/core@10.1.9': + resolution: {integrity: sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true '@inquirer/core@3.1.2': resolution: {integrity: sha512-lR2GaqBkp42Ew9BOAOqf2pSp+ymVES1qN8OC90WWh45yeoYLl0Ty1GyCxmkKqBJtq/+Ea1MF12AdFcZcpRNFsw==} engines: {node: '>=14.18.0'} - '@inquirer/editor@4.2.3': - resolution: {integrity: sha512-S9KnIOJuTZpb9upeRSBBhoDZv7aSV3pG9TECrBj0f+ZsFwccz886hzKBrChGrXMJwd4NKY+pOA9Vy72uqnd6Eg==} + '@inquirer/editor@4.2.9': + resolution: {integrity: sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/expand@4.0.6': - resolution: {integrity: sha512-TRTfi1mv1GeIZGyi9PQmvAaH65ZlG4/FACq6wSzs7Vvf1z5dnNWsAAXBjWMHt76l+1hUY8teIqJFrWBk5N6gsg==} + '@inquirer/expand@4.0.11': + resolution: {integrity: sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/figures@1.0.9': - resolution: {integrity: sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==} + '@inquirer/figures@1.0.11': + resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} engines: {node: '>=18'} - '@inquirer/input@4.1.3': - resolution: {integrity: sha512-zeo++6f7hxaEe7OjtMzdGZPHiawsfmCZxWB9X1NpmYgbeoyerIbWemvlBxxl+sQIlHC0WuSAG19ibMq3gbhaqQ==} + '@inquirer/input@4.1.8': + resolution: {integrity: sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/number@3.0.6': - resolution: {integrity: sha512-xO07lftUHk1rs1gR0KbqB+LJPhkUNkyzV/KhH+937hdkMazmAYHLm1OIrNKpPelppeV1FgWrgFDjdUD8mM+XUg==} + '@inquirer/number@3.0.11': + resolution: {integrity: sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/password@4.0.6': - resolution: {integrity: sha512-QLF0HmMpHZPPMp10WGXh6F+ZPvzWE7LX6rNoccdktv/Rov0B+0f+eyXkAcgqy5cH9V+WSpbLxu2lo3ysEVK91w==} + '@inquirer/password@4.0.11': + resolution: {integrity: sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/prompts@7.2.3': - resolution: {integrity: sha512-hzfnm3uOoDySDXfDNOm9usOuYIaQvTgKp/13l1uJoe6UNY+Zpcn2RYt0jXz3yA+yemGHvDOxVzqWl3S5sQq53Q==} + '@inquirer/prompts@7.4.0': + resolution: {integrity: sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/rawlist@4.0.6': - resolution: {integrity: sha512-QoE4s1SsIPx27FO4L1b1mUjVcoHm1pWE/oCmm4z/Hl+V1Aw5IXl8FYYzGmfXaBT0l/sWr49XmNSiq7kg3Kd/Lg==} + '@inquirer/rawlist@4.0.11': + resolution: {integrity: sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/search@3.0.6': - resolution: {integrity: sha512-eFZ2hiAq0bZcFPuFFBmZEtXU1EarHLigE+ENCtpO+37NHCl4+Yokq1P/d09kUblObaikwfo97w+0FtG/EXl5Ng==} + '@inquirer/search@3.0.11': + resolution: {integrity: sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/select@4.0.6': - resolution: {integrity: sha512-yANzIiNZ8fhMm4NORm+a74+KFYHmf7BZphSOBovIzYPVLquseTGEkU5l2UTnBOf5k0VLmTgPighNDLE9QtbViQ==} + '@inquirer/select@4.1.0': + resolution: {integrity: sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true '@inquirer/type@1.5.5': resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} engines: {node: '>=18'} - '@inquirer/type@3.0.2': - resolution: {integrity: sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==} + '@inquirer/type@3.0.5': + resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@ioredis/commands@1.2.0': - resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} - - '@keyv/redis@3.0.1': - resolution: {integrity: sha512-eyqzomQC76LjUOEkPP8rdR2Fk4eZBSS0Ma47i7CNiQuv8NCw3trZvghx8L5Xruk7XPEj/eRAMrAxP//xQFOPdQ==} + '@keyv/redis@4.3.2': + resolution: {integrity: sha512-9LtpIiRArUIg+hj1hV87d0G+1/229S0Ybi2bupc497oRzHOhYojUkApfubHjMDnYcNuEY7JQTdHlYYCPxhaZfg==} engines: {node: '>= 18'} - '@keyv/serialize@1.0.2': - resolution: {integrity: sha512-+E/LyaAeuABniD/RvUezWVXKpeuvwLEA9//nE9952zBaOdBd2mQ3pPoM8cUe2X6IcMByfuSLzmYqnYshG60+HQ==} + '@keyv/serialize@1.0.3': + resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==} '@keyv/sqlite@4.0.1': resolution: {integrity: sha512-Ngs9jhElXN7efS9WvvCC/p6rXMbihna8eNLVBc421Zf+VcFd+pR4DOcS6yA9V22EKtAy4DEj7LtvEEIm0bb80A==} @@ -329,8 +367,8 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@napi-rs/wasm-runtime@0.2.6': - resolution: {integrity: sha512-z8YVS3XszxFTO73iwvFDNpQIzdMmSDTP/mB3E/ucR37V3Sx57hSExcXyMoNwaucWxnsWf4xfbZv0iZ30jr0M4Q==} + '@napi-rs/wasm-runtime@0.2.7': + resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==} '@noble/ciphers@0.5.3': resolution: {integrity: sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==} @@ -372,8 +410,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nostr-dev-kit/ndk@2.11.0': - resolution: {integrity: sha512-FKIMtcVsVcquzrC+yir9lOXHCIHmQ3IKEVCMohqEB7N96HjP2qrI9s5utbjI3lkavFNF5tXg1Gp9ODEo7XCfLA==} + '@nostr-dev-kit/ndk@2.12.2': + resolution: {integrity: sha512-uvautgwbpk3AgddoFpew67/FiaV/zpKwwvSnjCvbE/tAdJBpUUS+VjWR5WfUnJvxTy/ZZpPW+X2TkwVFHhUdvA==} engines: {node: '>=16'} '@npmcli/fs@1.1.1': @@ -384,58 +422,58 @@ packages: engines: {node: '>=10'} deprecated: This functionality has been moved to @npmcli/fs - '@oxc-resolver/binding-darwin-arm64@1.12.0': - resolution: {integrity: sha512-wYe+dlF8npM7cwopOOxbdNjtmJp17e/xF5c0K2WooQXy5VOh74icydM33+Uh/SZDgwyum09/U1FVCX5GdeQk+A==} + '@oxc-resolver/binding-darwin-arm64@5.0.0': + resolution: {integrity: sha512-zwHAf+owoxSWTDD4dFuwW+FkpaDzbaL30H5Ltocb+RmLyg4WKuteusRLKh5Y8b/cyu7UzhxM0haIqQjyqA1iuA==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@1.12.0': - resolution: {integrity: sha512-FZxxp99om+SlvBr1cjzF8A3TjYcS0BInCqjUlM+2f9m9bPTR2Bng9Zq5Q09ZQyrKJjfGKqlOEHs3akuVOnrx3Q==} + '@oxc-resolver/binding-darwin-x64@5.0.0': + resolution: {integrity: sha512-1lS3aBNVjVQKBvZdHm13+8tSjvu2Tl1Cv4FnUyMYxqx6+rsom2YaOylS5LhDUwfZu0zAgpLMwK6kGpF/UPncNg==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@1.12.0': - resolution: {integrity: sha512-BZi0iU6IEOnXGSkqt1OjTTkN9wfyaK6kTpQwL/axl8eCcNDc7wbv1vloHgILf7ozAY1TP75nsLYlASYI4B5kGA==} + '@oxc-resolver/binding-freebsd-x64@5.0.0': + resolution: {integrity: sha512-q9sRd68wC1/AJ0eu6ClhxlklVfe8gH4wrUkSyEbIYTZ8zY5yjsLY3fpqqsaCvWJUx65nW+XtnAxCGCi5AXr1Mw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@1.12.0': - resolution: {integrity: sha512-L2qnMEnZAqxbG9b1J3di/w/THIm+1fMVfbbTMWIQNMMXdMeqqDN6ojnOLDtuP564rAh4TBFPdLyEfGhMz6ipNA==} + '@oxc-resolver/binding-linux-arm-gnueabihf@5.0.0': + resolution: {integrity: sha512-catYavWsvqViYnCveQjhrK6yVYDEPFvIOgGLxnz5r2dcgrjpmquzREoyss0L2QG/J5HTTbwqwZ1kk+g56hE/1A==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@1.12.0': - resolution: {integrity: sha512-otVbS4zeo3n71zgGLBYRTriDzc0zpruC0WI3ICwjpIk454cLwGV0yzh4jlGYWQJYJk0BRAmXFd3ooKIF+bKBHw==} + '@oxc-resolver/binding-linux-arm64-gnu@5.0.0': + resolution: {integrity: sha512-l/0pWoQM5kVmJLg4frQ1mKZOXgi0ex/hzvFt8E4WK2ifXr5JgKFUokxsb/oat7f5YzdJJh5r9p+qS/t3dA26Aw==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-arm64-musl@1.12.0': - resolution: {integrity: sha512-IStQDjIT7Lzmqg1i9wXvPL/NsYsxF24WqaQFS8b8rxra+z0VG7saBOsEnOaa4jcEY8MVpLYabFhTV+fSsA2vnA==} + '@oxc-resolver/binding-linux-arm64-musl@5.0.0': + resolution: {integrity: sha512-bx0oz/oaAW4FGYqpIIxJCnmgb906YfMhTEWCJvYkxjpEI8VKLJEL3PQevYiqDq36SA0yRLJ/sQK2fqry8AFBfA==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-x64-gnu@1.12.0': - resolution: {integrity: sha512-SipT7EVORz8pOQSFwemOm91TpSiBAGmOjG830/o+aLEsvQ4pEy223+SAnCfITh7+AahldYsJnVoIs519jmIlKQ==} + '@oxc-resolver/binding-linux-x64-gnu@5.0.0': + resolution: {integrity: sha512-4PH++qbSIhlRsFYdN1P9neDov4OGhTGo5nbQ1D7AL6gWFLo3gdZTc00FM2y8JjeTcPWEXkViZuwpuc0w5i6qHg==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-linux-x64-musl@1.12.0': - resolution: {integrity: sha512-mGh0XfUzKdn+WFaqPacziNraCWL5znkHRfQVxG9avGS9zb2KC/N1EBbPzFqutDwixGDP54r2gx4q54YCJEZ4iQ==} + '@oxc-resolver/binding-linux-x64-musl@5.0.0': + resolution: {integrity: sha512-mLfQFpX3/5y9oWi0b+9FbWDkL2hM0Y29653beCHiHxAdGyVgb2DsJbK74WkMTwtSz9by8vyBh8jGPZcg1yLZbQ==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-wasm32-wasi@1.12.0': - resolution: {integrity: sha512-SZN6v7apKmQf/Vwiqb6e/s3Y2Oacw8uW8V2i1AlxtyaEFvnFE0UBn89zq6swEwE3OCajNWs0yPvgAXUMddYc7Q==} + '@oxc-resolver/binding-wasm32-wasi@5.0.0': + resolution: {integrity: sha512-uEhsAZSo65qsRi6+IfBTEUUFbjg7T2yruJeLYpFfEATpm3ory5Mgo5vx3L0c2/Cz1OUZXBgp3A8x6VMUB2jT2A==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@1.12.0': - resolution: {integrity: sha512-GRe4bqCfFsyghruEn5bv47s9w3EWBdO2q72xCz5kpQ0LWbw+enPHtTjw3qX5PUcFYpKykM55FaO0hFDs1yzatw==} + '@oxc-resolver/binding-win32-arm64-msvc@5.0.0': + resolution: {integrity: sha512-8DbSso9Jp1ns8AYuZFXdRfAcdJrzZwkFm/RjPuvAPTENsm685dosBF8G6gTHQlHvULnk6o3sa9ygZaTGC/UoEw==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@1.12.0': - resolution: {integrity: sha512-Z3llHH0jfJP4mlWq3DT7bK6qV+/vYe0+xzCgfc67+Tc/U3eYndujl880bexeGdGNPh87JeYznpZAOJ44N7QVVQ==} + '@oxc-resolver/binding-win32-x64-msvc@5.0.0': + resolution: {integrity: sha512-ylppfPEg63NuRXOPNsXFlgyl37JrtRn0QMO26X3K3Ytp5HtLrMreQMGVtgr30e1l2YmAWqhvmKlCryOqzGPD/g==} cpu: [x64] os: [win32] @@ -444,6 +482,35 @@ packages: engines: {node: '>=18'} hasBin: true + '@redis/bloom@1.2.0': + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/client@1.6.0': + resolution: {integrity: sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==} + engines: {node: '>=14'} + + '@redis/graph@1.1.1': + resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/json@1.0.7': + resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/search@1.2.0': + resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/time-series@1.1.0': + resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} + peerDependencies: + '@redis/client': ^1.0.0 + '@scure/base@1.1.1': resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} @@ -469,8 +536,8 @@ packages: '@swc/core': '>= 1.4.13' '@swc/types': '>= 0.1' - '@swc-node/register@1.10.9': - resolution: {integrity: sha512-iXy2sjP0phPEpK2yivjRC3PAgoLaT4sjSk0LDWCTdcTBJmR4waEog0E6eJbvoOkLkOtWw37SB8vCkl/bbh4+8A==} + '@swc-node/register@1.10.10': + resolution: {integrity: sha512-jYWaI2WNEKz8KZL3sExd2KVL1JMma1/J7z+9iTpv0+fRN7LGMF8VTGGuHI2bug/ztpdZU1G44FG/Kk6ElXL9CQ==} peerDependencies: '@swc/core': '>= 1.4.13' typescript: '>= 4.3' @@ -478,68 +545,68 @@ packages: '@swc-node/sourcemap-support@0.5.1': resolution: {integrity: sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==} - '@swc/core-darwin-arm64@1.10.9': - resolution: {integrity: sha512-XTHLtijFervv2B+i1ngM993umhSj9K1IeMomvU/Db84Asjur2XmD4KXt9QPnGDRFgv2kLSjZ+DDL25Qk0f4r+w==} + '@swc/core-darwin-arm64@1.11.10': + resolution: {integrity: sha512-FWwYyhUu+xRXldXHw4CBP6M0rXQs9gnE5/qodsb+cyOJaTHI8kU6FJtwaC0PiOVxjREdg/DoTrXS4sZUiL881A==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.10.9': - resolution: {integrity: sha512-bi3el9/FV/la8HIsolSjeDar+tM7m9AmSF1w7X6ZByW2qgc4Z1tmq0A4M4H9aH3TfHesZbfq8hgaNtc2/VtzzQ==} + '@swc/core-darwin-x64@1.11.10': + resolution: {integrity: sha512-NKQ62w81TGR5YAidV3KF7CDY0nu62OWmz6Hl/mB/i8Cd9xPc+MnLwdY1cJOU/DsrU4YnRFSaOfBF4Fx4mKLWxA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.10.9': - resolution: {integrity: sha512-xsLHV02S+RTDuI+UJBkA2muNk/s0ETRpoc1K/gNt0i8BqTurPYkrvGDDALN9+leiUPydHvZi9P1qdExbgUJnXw==} + '@swc/core-linux-arm-gnueabihf@1.11.10': + resolution: {integrity: sha512-1Vu+ZjoR7M8ShIf0Koi+B1OJ6DsU7jd4Py743KCgKlabvLFrv/uahp5fPJ1kyAUTxFE5d37qWqWLl5NkYDmDtQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.10.9': - resolution: {integrity: sha512-41hJgPoGhIa12U6Tud+yLF/m64YA3mGut3TmBEkj2R7rdJdE0mljdtR0tf4J2RoQaWZPPi0DBSqGdROiAEx9dg==} + '@swc/core-linux-arm64-gnu@1.11.10': + resolution: {integrity: sha512-mP26821Auyqa+Dce8gFlH4GxxbJ8xJU8H5/iIU8ObK12ulmK75G2VdILoc3gFDKfx3K7IqQkfokW3PAGI9X2Vg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.10.9': - resolution: {integrity: sha512-DUMRhl49b9r7bLg9oNzCdW4lLcDJKrRBn87Iq5APPvixsm1auGnsVQycGkQcDDKvVllxIFSbmCYzjagx3l8Hnw==} + '@swc/core-linux-arm64-musl@1.11.10': + resolution: {integrity: sha512-XZ61quwNgTqvbMqpFAa6/ZqoErabocHUHMWQHyShxbqM2nkP1sBe6EgODX6mNSzLn0u+KDVRyQUy9ratt+xbFw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.10.9': - resolution: {integrity: sha512-xW0y88vQvmzYo3Gn7yFnY03TfHMwuca4aFH3ZmhwDNOYHmTOi6fmhAkg/13F/NrwjMYO+GnF5uJTjdjb3B6tdQ==} + '@swc/core-linux-x64-gnu@1.11.10': + resolution: {integrity: sha512-BwohorC2nkak8YQuS6IH/70XkhBjqmPbL7KT0NKmr4sstRe52I3F5Vbo30xBckpvT8ZRPvjmjK3FvJ2Rf3PRmw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.10.9': - resolution: {integrity: sha512-jYs32BEx+CPVuxN6NdsWEpdehjnmAag25jyJzwjQx+NCGYwHEV3bT5y8TX4eFhaVB1rafmqJOlYQPs4+MSyGCg==} + '@swc/core-linux-x64-musl@1.11.10': + resolution: {integrity: sha512-bCaEJVB1+5KscAolNfL6qd3I1bVovhNDShutrTlNXNvjqNavWrX8z8ZfSJ3oK6CvrBzFR6fjCSqkoD+ckKBYBA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.10.9': - resolution: {integrity: sha512-Uhh5T3Fq3Nyom96Bm3ACBNASH3iqNc76in7ewZz8PooUqeTIO8aZpsghnncjctRNE9T819/8btpiFIhHo3sKtg==} + '@swc/core-win32-arm64-msvc@1.11.10': + resolution: {integrity: sha512-Gq4svadhEVP7xClzsV8W2/8R/kfEUbJJKIS2fj8hb9lM6/AVs/PVmDiLGye6cYfVpQzkdDsJLm8r4yhSAIFsFQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.10.9': - resolution: {integrity: sha512-bD5BpbojEsDfrAvT+1qjQPf5RCKLg4UL+3Uwm019+ZR02hd8qO538BlOnQdOqRqccu+75DF6aRglQ7AJ24Cs0Q==} + '@swc/core-win32-ia32-msvc@1.11.10': + resolution: {integrity: sha512-RkZYTY0pQiHgcoFJwZoFZiEWw4WB/XVLp+y90l4Ar1nnoQQNmfb4FyvWYZbDQgrMGP0Wj5WhZuMXzW12/qI5Kg==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.10.9': - resolution: {integrity: sha512-NwkuUNeBBQnAaXVvcGw8Zr6RR8kylyjFUnlYZZ3G0QkQZ4rYLXYTafAmiRjrfzgVb0LcMF/sBzJvGOk7SwtIDg==} + '@swc/core-win32-x64-msvc@1.11.10': + resolution: {integrity: sha512-clDl+oAl6YLsqZiGb8NzpEXTdIzCTPCJSRFCeHIldjLlsAs+qsqItry2r2xSAKU1pFv4D7j9WgJmVVxOPgs/Jg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.10.9': - resolution: {integrity: sha512-MQ97YSXu2oibzm7wi4GNa7hhndjLuVt/lmO2sq53+P37oZmyg/JQ/IYYtSiC6UGK3+cHoiVAykrK+glxLjJbag==} + '@swc/core@1.11.10': + resolution: {integrity: sha512-Si27CiYwqJSF3K0HgxugQnjHNfH7YqqD89V+fLpyRHr81uTmCQpF0bnVdRMQ2SGAkCFJACYETRiBSrZOQ660+Q==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -550,8 +617,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/types@0.1.17': - resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} + '@swc/types@0.1.19': + resolution: {integrity: sha512-WkAZaAfj44kh/UFdAQcrMP1I0nwRqpt27u+08LMBYMqmQfwwMofYoMh/48NGkMMRfC4ynpfwRbJuu8ErfNloeA==} '@tootallnate/once@1.1.2': resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} @@ -584,8 +651,8 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/express-serve-static-core@5.0.5': - resolution: {integrity: sha512-GLZPrd9ckqEBFMcVM/qRFAP0Hg3qiVEojgEFsx/N/zKXsBzbGF6z5FBDpZ0+Xhp1xr+qRZYjfGr1cWHB9oFHSA==} + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} '@types/express@5.0.0': resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} @@ -638,8 +705,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@20.17.14': - resolution: {integrity: sha512-w6qdYetNL5KRBiSClK/KWai+2IMEJuAj+EujKCumalFOwXtvOXaEan9AuwcRID2IcOIAWSIfR495hBtgKlx2zg==} + '@types/node@20.17.24': + resolution: {integrity: sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==} '@types/proxy-from-env@1.0.4': resolution: {integrity: sha512-TPR9/bCZAr3V1eHN4G3LD3OLicdJjqX1QRXWuNcCYgE66f/K8jO2ZRtHxI2D9MbnuUP6+qiKSS8eUHp6TFHGCw==} @@ -659,8 +726,8 @@ packages: '@types/wrap-ansi@3.0.0': resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - '@types/ws@8.5.13': - resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + '@types/ws@8.18.0': + resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -733,8 +800,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axios@1.8.3: + resolution: {integrity: sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -749,15 +816,15 @@ packages: resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==} engines: {bare: '>=1.7.0'} - bare-os@3.4.0: - resolution: {integrity: sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA==} - engines: {bare: '>=1.6.0'} + bare-os@3.6.0: + resolution: {integrity: sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==} + engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.6.4: - resolution: {integrity: sha512-G6i3A74FjNq4nVrrSTUz5h3vgXzBJnjmWAVlBWaZETkgu+LgKd7AiyOml3EDJY1AHlIbBHKDXE+TUT53Ff8OaA==} + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -796,6 +863,10 @@ packages: resolution: {integrity: sha512-a95eZV7W5/QPN30p0s2K8ZxX0vwMXsnl2JIJDXaOu0nDVxikfKINa/7mhTRtA2i3dzjQ378FPET8vwn0GjtFzg==} engines: {node: '>=18'} + blossom-client-sdk@3.0.1: + resolution: {integrity: sha512-LG4evwVH8LDRTUoc+1C/o68ITDzK68kuqLwZv4aTBlm9cEtFAWBDtrZeajnqNAN77dTFA0U1QX82GLt6CCkMKw==} + engines: {node: '>=18'} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -823,12 +894,12 @@ packages: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} - call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} callsites@3.1.0: @@ -904,8 +975,8 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} concat-map@0.0.1: @@ -994,10 +1065,6 @@ packages: delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - denque@2.1.0: - resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} - engines: {node: '>=0.10'} - depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -1075,6 +1142,10 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1131,8 +1202,8 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fastq@1.18.0: - resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -1169,8 +1240,8 @@ packages: debug: optional: true - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} formdata-polyfill@4.0.10: @@ -1212,12 +1283,16 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} get-proto@1.0.1: @@ -1308,8 +1383,9 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + human-id@4.1.1: + resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} + hasBin: true humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -1332,8 +1408,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} import2@1.0.3: @@ -1367,15 +1443,14 @@ packages: resolution: {integrity: sha512-mlzwCTiXDX1Cw4yJL5PCq32k23XYLTK8K6BDFoL1a76iJeFB5ul6IoMU9spgdDagl2SM7P6ZaCNjj8VNXRDPOQ==} engines: {node: '>=16'} - inquirer@12.3.2: - resolution: {integrity: sha512-YjQCIcDd3yyDuQrbII0FBtm/ZqNoWtvaC71yeCnd5Vbg4EgzsAGaemzfpzmqfvIZEp2roSwuZZKdM0C65hA43g==} + inquirer@12.5.0: + resolution: {integrity: sha512-aiBBq5aKF1k87MTxXDylLfwpRwToShiHrSv4EmB07EYyLgmnjEz5B3rn0aGw1X3JA/64Ngf2T54oGwc+BCsPIQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' - - ioredis@5.4.2: - resolution: {integrity: sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==} - engines: {node: '>=12.22.0'} + peerDependenciesMeta: + '@types/node': + optional: true ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} @@ -1454,8 +1529,8 @@ packages: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} - keyv@5.2.3: - resolution: {integrity: sha512-AGKecUfzrowabUv0bH1RIR5Vf7w+l4S3xtQAypKaUpTdIR1EbrAcTxHCrpo9Q+IWeUlFE2palRtgIQcgm+PQJw==} + keyv@5.3.2: + resolution: {integrity: sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==} koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} @@ -1475,8 +1550,8 @@ packages: resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} - koa@2.15.3: - resolution: {integrity: sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==} + koa@2.16.0: + resolution: {integrity: sha512-Afhqq0Vq3W7C+/rW6IqHVBDLzqObwZ07JaUNUEF8yCQ6afiyFE3RAy+i7V0E46XOWlH7vPWn/x0vsZwNy6PWxw==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} light-bolt11-decoder@3.2.0: @@ -1489,12 +1564,6 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - - lodash.isarguments@3.1.0: - resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -1629,8 +1698,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - node-abi@3.73.0: - resolution: {integrity: sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==} + node-abi@3.74.0: + resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} engines: {node: '>=10'} node-addon-api@7.1.1: @@ -1663,8 +1732,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - nostr-tools@2.10.4: - resolution: {integrity: sha512-biU7sk+jxHgVASfobg2T5ttxOGGSt69wEVBC51sHHOEaKAAdzHBLV/I2l9Rf61UzClhliZwNouYhqIso4a3HYg==} + nostr-tools@2.11.0: + resolution: {integrity: sha512-kRtXI9j5f45NvIcdJacQ0UEAfEb7p/jhZqhAGLQWtUd5idZJPYdSyR8hdw+MmpGH4TCMH5plZrXzFltIIZrkEA==} peerDependencies: typescript: '>=5.0.0' peerDependenciesMeta: @@ -1679,8 +1748,8 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. - nsite-cli@0.1.14: - resolution: {integrity: sha512-ZPIIrft//YJJpKINrVDOiTxA1ut1vK5YocrY/Dwf2dSM0xzER2ipF6QL5hfVHbT84wC5R3Ea9O1IoH17nuFHoQ==} + nsite-cli@0.1.16: + resolution: {integrity: sha512-sZ69Y3zA8/cx3r1omisW/EKOga1N1oIUony+VmPs8j3CxFSWMmpshnxXKjkEL8++0sD2xFCK/QRgTgSJ8PTUGg==} engines: {node: '>=20.0.0', npm: '>=8.0.0 '} hasBin: true @@ -1709,8 +1778,8 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - oxc-resolver@1.12.0: - resolution: {integrity: sha512-YlaCIArvWNKCWZFRrMjhh2l5jK80eXnpYP+bhRc1J/7cW3TiyEY0ngJo73o/5n8hA3+4yLdTmXLNTQ3Ncz50LQ==} + oxc-resolver@5.0.0: + resolution: {integrity: sha512-66fopyAqCN8Mx4tzNiBXWbk8asCSuxUWN62gwTc3yfRs7JfWhX/eVJCf+fUrfbNOdQVOWn+o8pAKllp76ysMXA==} p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} @@ -1736,16 +1805,16 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.1.0: - resolution: {integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==} + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} engines: {node: '>= 14'} pac-resolver@7.0.1: resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} - package-manager-detector@0.2.8: - resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -1803,8 +1872,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -1846,12 +1915,12 @@ packages: engines: {node: '>=18'} hasBin: true + quansync@0.2.8: + resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -1868,13 +1937,8 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - redis-errors@1.2.0: - resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} - engines: {node: '>=4'} - - redis-parser@3.0.0: - resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} - engines: {node: '>=4'} + redis@4.7.0: + resolution: {integrity: sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==} regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -1899,8 +1963,8 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rimraf@3.0.2: @@ -1915,8 +1979,8 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -1931,8 +1995,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true @@ -1986,8 +2050,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} source-map-support@0.5.21: @@ -2013,15 +2077,12 @@ packages: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} - standard-as-callback@2.1.0: - resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} - statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} - streamx@2.21.1: - resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==} + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -2123,8 +2184,8 @@ packages: typescript-lru-cache@2.0.0: resolution: {integrity: sha512-Jp57Qyy8wXeMkdNuZiglE6v2Cypg13eDA1chHwDG6kq51X7gk4K7P7HaDdzZKCxkegXkVHNcPD0n5aW6OZH3aA==} - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -2184,8 +2245,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -2239,16 +2300,15 @@ snapshots: '@babel/helper-validator-identifier@7.25.9': {} - '@babel/runtime@7.26.0': + '@babel/runtime@7.26.10': dependencies: regenerator-runtime: 0.14.1 - '@cashu/cashu-ts@2.1.0': + '@cashu/cashu-ts@2.2.2': dependencies: '@cashu/crypto': 0.3.4 '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 - '@scure/bip32': 1.6.2 buffer: 6.0.3 '@cashu/crypto@0.3.4': @@ -2259,13 +2319,13 @@ snapshots: '@scure/bip39': 1.5.4 buffer: 6.0.3 - '@changesets/apply-release-plan@7.0.7': + '@changesets/apply-release-plan@7.0.10': dependencies: - '@changesets/config': 3.0.5 + '@changesets/config': 3.1.1 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 fs-extra: 7.0.1 @@ -2273,37 +2333,37 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.7.1 - '@changesets/assemble-release-plan@6.0.5': + '@changesets/assemble-release-plan@6.0.6': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.6.3 + semver: 7.7.1 - '@changesets/changelog-git@0.2.0': + '@changesets/changelog-git@0.2.1': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 - '@changesets/cli@2.27.11': + '@changesets/cli@2.28.1': dependencies: - '@changesets/apply-release-plan': 7.0.7 - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.5 + '@changesets/apply-release-plan': 7.0.10 + '@changesets/assemble-release-plan': 6.0.6 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.1 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.6 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.8 '@changesets/git': 3.0.2 '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.2 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 @@ -2312,19 +2372,19 @@ snapshots: fs-extra: 7.0.1 mri: 1.2.0 p-limit: 2.3.0 - package-manager-detector: 0.2.8 + package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.7.1 spawndamnit: 3.0.1 term-size: 2.2.1 - '@changesets/config@3.0.5': + '@changesets/config@3.1.1': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-dependents-graph': 2.1.3 '@changesets/logger': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.8 @@ -2333,20 +2393,20 @@ snapshots: dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@2.1.2': + '@changesets/get-dependents-graph@2.1.3': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.6.3 + semver: 7.7.1 - '@changesets/get-release-plan@4.0.6': + '@changesets/get-release-plan@4.0.8': dependencies: - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/config': 3.0.5 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/types': 6.0.0 + '@changesets/assemble-release-plan': 6.0.6 + '@changesets/config': 3.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.3 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 '@changesets/get-version-range-type@0.4.0': {} @@ -2363,42 +2423,42 @@ snapshots: dependencies: picocolors: 1.1.1 - '@changesets/parse@0.4.0': + '@changesets/parse@0.4.1': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 js-yaml: 3.14.1 - '@changesets/pre@2.0.1': + '@changesets/pre@2.0.2': dependencies: '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.2': + '@changesets/read@0.6.3': dependencies: '@changesets/git': 3.0.2 '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 + '@changesets/parse': 0.4.1 + '@changesets/types': 6.1.0 fs-extra: 7.0.1 p-filter: 2.1.0 picocolors: 1.1.1 - '@changesets/should-skip-package@0.1.1': + '@changesets/should-skip-package@0.1.2': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 '@changesets/types@4.1.0': {} - '@changesets/types@6.0.0': {} + '@changesets/types@6.1.0': {} - '@changesets/write@0.3.2': + '@changesets/write@0.4.0': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 fs-extra: 7.0.1 - human-id: 1.0.2 + human-id: 4.1.1 prettier: 2.8.8 '@emnapi/core@1.3.1': @@ -2420,40 +2480,41 @@ snapshots: '@gar/promisify@1.1.3': optional: true - '@inquirer/checkbox@4.0.6(@types/node@20.17.14)': + '@inquirer/checkbox@4.1.4(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@20.17.24) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/confirm@5.1.3(@types/node@20.17.14)': + '@inquirer/confirm@5.1.8(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/type': 3.0.5(@types/node@20.17.24) + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/core@10.1.4(@types/node@20.17.14)': + '@inquirer/core@10.1.9(@types/node@20.17.24)': dependencies: - '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2(@types/node@20.17.14) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@20.17.24) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 - strip-ansi: 6.0.1 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 - transitivePeerDependencies: - - '@types/node' + optionalDependencies: + '@types/node': 20.17.24 '@inquirer/core@3.1.2': dependencies: '@inquirer/type': 1.5.5 '@types/mute-stream': 0.0.1 - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -2465,96 +2526,103 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - '@inquirer/editor@4.2.3(@types/node@20.17.14)': + '@inquirer/editor@4.2.9(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/type': 3.0.5(@types/node@20.17.24) external-editor: 3.1.0 + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/expand@4.0.6(@types/node@20.17.14)': + '@inquirer/expand@4.0.11(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/type': 3.0.5(@types/node@20.17.24) yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/figures@1.0.9': {} + '@inquirer/figures@1.0.11': {} - '@inquirer/input@4.1.3(@types/node@20.17.14)': + '@inquirer/input@4.1.8(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/type': 3.0.5(@types/node@20.17.24) + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/number@3.0.6(@types/node@20.17.14)': + '@inquirer/number@3.0.11(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/type': 3.0.5(@types/node@20.17.24) + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/password@4.0.6(@types/node@20.17.14)': + '@inquirer/password@4.0.11(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/type': 3.0.5(@types/node@20.17.24) ansi-escapes: 4.3.2 + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/prompts@7.2.3(@types/node@20.17.14)': + '@inquirer/prompts@7.4.0(@types/node@20.17.24)': dependencies: - '@inquirer/checkbox': 4.0.6(@types/node@20.17.14) - '@inquirer/confirm': 5.1.3(@types/node@20.17.14) - '@inquirer/editor': 4.2.3(@types/node@20.17.14) - '@inquirer/expand': 4.0.6(@types/node@20.17.14) - '@inquirer/input': 4.1.3(@types/node@20.17.14) - '@inquirer/number': 3.0.6(@types/node@20.17.14) - '@inquirer/password': 4.0.6(@types/node@20.17.14) - '@inquirer/rawlist': 4.0.6(@types/node@20.17.14) - '@inquirer/search': 3.0.6(@types/node@20.17.14) - '@inquirer/select': 4.0.6(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/checkbox': 4.1.4(@types/node@20.17.24) + '@inquirer/confirm': 5.1.8(@types/node@20.17.24) + '@inquirer/editor': 4.2.9(@types/node@20.17.24) + '@inquirer/expand': 4.0.11(@types/node@20.17.24) + '@inquirer/input': 4.1.8(@types/node@20.17.24) + '@inquirer/number': 3.0.11(@types/node@20.17.24) + '@inquirer/password': 4.0.11(@types/node@20.17.24) + '@inquirer/rawlist': 4.0.11(@types/node@20.17.24) + '@inquirer/search': 3.0.11(@types/node@20.17.24) + '@inquirer/select': 4.1.0(@types/node@20.17.24) + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/rawlist@4.0.6(@types/node@20.17.14)': + '@inquirer/rawlist@4.0.11(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/type': 3.0.5(@types/node@20.17.24) yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/search@3.0.6(@types/node@20.17.14)': + '@inquirer/search@3.0.11(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@20.17.24) yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.17.24 - '@inquirer/select@4.0.6(@types/node@20.17.14)': + '@inquirer/select@4.1.0(@types/node@20.17.24)': dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@20.17.24) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 20.17.24 '@inquirer/type@1.5.5': dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.2(@types/node@20.17.14)': + '@inquirer/type@3.0.5(@types/node@20.17.24)': + optionalDependencies: + '@types/node': 20.17.24 + + '@keyv/redis@4.3.2': dependencies: - '@types/node': 20.17.14 + cluster-key-slot: 1.1.2 + keyv: 5.3.2 + redis: 4.7.0 - '@ioredis/commands@1.2.0': {} - - '@keyv/redis@3.0.1': - dependencies: - ioredis: 5.4.2 - transitivePeerDependencies: - - supports-color - - '@keyv/serialize@1.0.2': + '@keyv/serialize@1.0.3': dependencies: buffer: 6.0.3 @@ -2571,21 +2639,21 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.10 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.10 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - '@napi-rs/wasm-runtime@0.2.6': + '@napi-rs/wasm-runtime@0.2.7': dependencies: '@emnapi/core': 1.3.1 '@emnapi/runtime': 1.3.1 @@ -2624,9 +2692,9 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.18.0 + fastq: 1.19.1 - '@nostr-dev-kit/ndk@2.11.0(typescript@5.7.3)': + '@nostr-dev-kit/ndk@2.12.2(typescript@5.8.2)': dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 @@ -2634,7 +2702,7 @@ snapshots: '@scure/base': 1.2.4 debug: 4.4.0(supports-color@5.5.0) light-bolt11-decoder: 3.2.0 - nostr-tools: 2.10.4(typescript@5.7.3) + nostr-tools: 2.11.0(typescript@5.8.2) tseep: 1.3.1 typescript-lru-cache: 2.0.0 utf8-buffer: 1.0.0 @@ -2648,7 +2716,7 @@ snapshots: '@npmcli/fs@1.1.1': dependencies: '@gar/promisify': 1.1.3 - semver: 7.6.3 + semver: 7.7.1 optional: true '@npmcli/move-file@1.1.2': @@ -2657,39 +2725,39 @@ snapshots: rimraf: 3.0.2 optional: true - '@oxc-resolver/binding-darwin-arm64@1.12.0': + '@oxc-resolver/binding-darwin-arm64@5.0.0': optional: true - '@oxc-resolver/binding-darwin-x64@1.12.0': + '@oxc-resolver/binding-darwin-x64@5.0.0': optional: true - '@oxc-resolver/binding-freebsd-x64@1.12.0': + '@oxc-resolver/binding-freebsd-x64@5.0.0': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@1.12.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@5.0.0': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@1.12.0': + '@oxc-resolver/binding-linux-arm64-gnu@5.0.0': optional: true - '@oxc-resolver/binding-linux-arm64-musl@1.12.0': + '@oxc-resolver/binding-linux-arm64-musl@5.0.0': optional: true - '@oxc-resolver/binding-linux-x64-gnu@1.12.0': + '@oxc-resolver/binding-linux-x64-gnu@5.0.0': optional: true - '@oxc-resolver/binding-linux-x64-musl@1.12.0': + '@oxc-resolver/binding-linux-x64-musl@5.0.0': optional: true - '@oxc-resolver/binding-wasm32-wasi@1.12.0': + '@oxc-resolver/binding-wasm32-wasi@5.0.0': dependencies: - '@napi-rs/wasm-runtime': 0.2.6 + '@napi-rs/wasm-runtime': 0.2.7 optional: true - '@oxc-resolver/binding-win32-arm64-msvc@1.12.0': + '@oxc-resolver/binding-win32-arm64-msvc@5.0.0': optional: true - '@oxc-resolver/binding-win32-x64-msvc@1.12.0': + '@oxc-resolver/binding-win32-x64-msvc@5.0.0': optional: true '@puppeteer/browsers@2.6.1': @@ -2698,7 +2766,7 @@ snapshots: extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.6.3 + semver: 7.7.1 tar-fs: 3.0.8 unbzip2-stream: 1.4.3 yargs: 17.7.2 @@ -2706,6 +2774,32 @@ snapshots: - bare-buffer - supports-color + '@redis/bloom@1.2.0(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@redis/client@1.6.0': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/graph@1.1.1(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@redis/json@1.0.7(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@redis/search@1.2.0(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@redis/time-series@1.1.0(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + '@scure/base@1.1.1': {} '@scure/base@1.2.4': {} @@ -2732,22 +2826,22 @@ snapshots: '@noble/hashes': 1.7.1 '@scure/base': 1.2.4 - '@swc-node/core@1.13.3(@swc/core@1.10.9)(@swc/types@0.1.17)': + '@swc-node/core@1.13.3(@swc/core@1.11.10)(@swc/types@0.1.19)': dependencies: - '@swc/core': 1.10.9 - '@swc/types': 0.1.17 + '@swc/core': 1.11.10 + '@swc/types': 0.1.19 - '@swc-node/register@1.10.9(@swc/core@1.10.9)(@swc/types@0.1.17)(typescript@5.7.3)': + '@swc-node/register@1.10.10(@swc/core@1.11.10)(@swc/types@0.1.19)(typescript@5.8.2)': dependencies: - '@swc-node/core': 1.13.3(@swc/core@1.10.9)(@swc/types@0.1.17) + '@swc-node/core': 1.13.3(@swc/core@1.11.10)(@swc/types@0.1.19) '@swc-node/sourcemap-support': 0.5.1 - '@swc/core': 1.10.9 + '@swc/core': 1.11.10 colorette: 2.0.20 debug: 4.4.0(supports-color@5.5.0) - oxc-resolver: 1.12.0 + oxc-resolver: 5.0.0 pirates: 4.0.6 tslib: 2.8.1 - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - '@swc/types' - supports-color @@ -2757,55 +2851,55 @@ snapshots: source-map-support: 0.5.21 tslib: 2.8.1 - '@swc/core-darwin-arm64@1.10.9': + '@swc/core-darwin-arm64@1.11.10': optional: true - '@swc/core-darwin-x64@1.10.9': + '@swc/core-darwin-x64@1.11.10': optional: true - '@swc/core-linux-arm-gnueabihf@1.10.9': + '@swc/core-linux-arm-gnueabihf@1.11.10': optional: true - '@swc/core-linux-arm64-gnu@1.10.9': + '@swc/core-linux-arm64-gnu@1.11.10': optional: true - '@swc/core-linux-arm64-musl@1.10.9': + '@swc/core-linux-arm64-musl@1.11.10': optional: true - '@swc/core-linux-x64-gnu@1.10.9': + '@swc/core-linux-x64-gnu@1.11.10': optional: true - '@swc/core-linux-x64-musl@1.10.9': + '@swc/core-linux-x64-musl@1.11.10': optional: true - '@swc/core-win32-arm64-msvc@1.10.9': + '@swc/core-win32-arm64-msvc@1.11.10': optional: true - '@swc/core-win32-ia32-msvc@1.10.9': + '@swc/core-win32-ia32-msvc@1.11.10': optional: true - '@swc/core-win32-x64-msvc@1.10.9': + '@swc/core-win32-x64-msvc@1.11.10': optional: true - '@swc/core@1.10.9': + '@swc/core@1.11.10': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.17 + '@swc/types': 0.1.19 optionalDependencies: - '@swc/core-darwin-arm64': 1.10.9 - '@swc/core-darwin-x64': 1.10.9 - '@swc/core-linux-arm-gnueabihf': 1.10.9 - '@swc/core-linux-arm64-gnu': 1.10.9 - '@swc/core-linux-arm64-musl': 1.10.9 - '@swc/core-linux-x64-gnu': 1.10.9 - '@swc/core-linux-x64-musl': 1.10.9 - '@swc/core-win32-arm64-msvc': 1.10.9 - '@swc/core-win32-ia32-msvc': 1.10.9 - '@swc/core-win32-x64-msvc': 1.10.9 + '@swc/core-darwin-arm64': 1.11.10 + '@swc/core-darwin-x64': 1.11.10 + '@swc/core-linux-arm-gnueabihf': 1.11.10 + '@swc/core-linux-arm64-gnu': 1.11.10 + '@swc/core-linux-arm64-musl': 1.11.10 + '@swc/core-linux-x64-gnu': 1.11.10 + '@swc/core-linux-x64-musl': 1.11.10 + '@swc/core-win32-arm64-msvc': 1.11.10 + '@swc/core-win32-ia32-msvc': 1.11.10 + '@swc/core-win32-x64-msvc': 1.11.10 '@swc/counter@0.1.3': {} - '@swc/types@0.1.17': + '@swc/types@0.1.19': dependencies: '@swc/counter': 0.1.3 @@ -2821,20 +2915,20 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/better-sqlite3@7.6.12': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/connect@3.4.38': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/content-disposition@0.5.8': {} @@ -2843,15 +2937,15 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.0 '@types/keygrip': 1.0.6 - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 - '@types/express-serve-static-core@5.0.5': + '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -2859,13 +2953,13 @@ snapshots: '@types/express@5.0.0': dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 5.0.5 + '@types/express-serve-static-core': 5.0.6 '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 '@types/follow-redirects@1.14.4': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/http-assert@1.5.6': {} @@ -2900,7 +2994,7 @@ snapshots: '@types/http-errors': 2.0.4 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/koa__cors@5.0.0': dependencies: @@ -2914,23 +3008,23 @@ snapshots: '@types/morgan@1.9.9': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/ms@2.1.0': {} '@types/mute-stream@0.0.1': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/node@12.20.55': {} - '@types/node@20.17.14': + '@types/node@20.17.24': dependencies: undici-types: 6.19.8 '@types/proxy-from-env@1.0.4': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/qs@6.9.18': {} @@ -2939,23 +3033,23 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/send': 0.17.4 '@types/wrap-ansi@3.0.0': {} - '@types/ws@8.5.13': + '@types/ws@8.18.0': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.17.14 + '@types/node': 20.17.24 optional: true abbrev@1.1.1: @@ -3026,10 +3120,10 @@ snapshots: asynckit@0.4.0: {} - axios@1.7.9(debug@4.4.0): + axios@1.8.3(debug@4.4.0): dependencies: follow-redirects: 1.15.9(debug@4.4.0) - form-data: 4.0.1 + form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -3045,22 +3139,22 @@ snapshots: dependencies: bare-events: 2.5.4 bare-path: 3.0.0 - bare-stream: 2.6.4(bare-events@2.5.4) + bare-stream: 2.6.5(bare-events@2.5.4) transitivePeerDependencies: - bare-buffer optional: true - bare-os@3.4.0: + bare-os@3.6.0: optional: true bare-path@3.0.0: dependencies: - bare-os: 3.4.0 + bare-os: 3.6.0 optional: true - bare-stream@2.6.4(bare-events@2.5.4): + bare-stream@2.6.5(bare-events@2.5.4): dependencies: - streamx: 2.21.1 + streamx: 2.22.0 optionalDependencies: bare-events: 2.5.4 optional: true @@ -3091,7 +3185,12 @@ snapshots: blossom-client-sdk@2.1.1: dependencies: - '@cashu/cashu-ts': 2.1.0 + '@cashu/cashu-ts': 2.2.2 + '@noble/hashes': 1.7.1 + + blossom-client-sdk@3.0.1: + dependencies: + '@cashu/cashu-ts': 2.2.2 '@noble/hashes': 1.7.1 brace-expansion@1.1.11: @@ -3146,15 +3245,15 @@ snapshots: mime-types: 2.1.35 ylru: 1.4.0 - call-bind-apply-helpers@1.0.1: + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - call-bound@1.0.3: + call-bound@1.0.4: dependencies: - call-bind-apply-helpers: 1.0.1 - get-intrinsic: 1.2.7 + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 callsites@3.1.0: {} @@ -3221,7 +3320,7 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@12.1.0: {} + commander@13.1.0: {} concat-map@0.0.1: {} @@ -3239,14 +3338,14 @@ snapshots: depd: 2.0.0 keygrip: 1.1.0 - cosmiconfig@9.0.0(typescript@5.7.3): + cosmiconfig@9.0.0(typescript@5.8.2): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 cross-spawn@7.0.6: dependencies: @@ -3290,8 +3389,6 @@ snapshots: delegates@1.0.0: {} - denque@2.1.0: {} - depd@1.1.2: {} depd@2.0.0: {} @@ -3312,7 +3409,7 @@ snapshots: dunder-proto@1.0.1: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 @@ -3353,6 +3450,13 @@ snapshots: dependencies: es-errors: 1.3.0 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -3405,9 +3509,9 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fastq@1.18.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fd-slicer@1.1.0: dependencies: @@ -3442,10 +3546,11 @@ snapshots: optionalDependencies: debug: 4.4.0(supports-color@5.5.0) - form-data@4.0.1: + form-data@4.0.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 formdata-polyfill@4.0.10: @@ -3492,11 +3597,13 @@ snapshots: wide-align: 1.1.5 optional: true + generic-pool@3.9.0: {} + get-caller-file@2.0.5: {} - get-intrinsic@1.2.7: + get-intrinsic@1.3.0: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 @@ -3624,7 +3731,7 @@ snapshots: transitivePeerDependencies: - supports-color - human-id@1.0.2: {} + human-id@4.1.1: {} humanize-ms@1.2.1: dependencies: @@ -3646,7 +3753,7 @@ snapshots: ignore@5.3.2: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 @@ -3681,30 +3788,17 @@ snapshots: figures: 5.0.0 picocolors: 1.1.1 - inquirer@12.3.2(@types/node@20.17.14): + inquirer@12.5.0(@types/node@20.17.24): dependencies: - '@inquirer/core': 10.1.4(@types/node@20.17.14) - '@inquirer/prompts': 7.2.3(@types/node@20.17.14) - '@inquirer/type': 3.0.2(@types/node@20.17.14) - '@types/node': 20.17.14 + '@inquirer/core': 10.1.9(@types/node@20.17.24) + '@inquirer/prompts': 7.4.0(@types/node@20.17.24) + '@inquirer/type': 3.0.5(@types/node@20.17.24) ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 - rxjs: 7.8.1 - - ioredis@5.4.2: - dependencies: - '@ioredis/commands': 1.2.0 - cluster-key-slot: 1.1.2 - debug: 4.4.0(supports-color@5.5.0) - denque: 2.1.0 - lodash.defaults: 4.2.0 - lodash.isarguments: 3.1.0 - redis-errors: 1.2.0 - redis-parser: 3.0.0 - standard-as-callback: 2.1.0 - transitivePeerDependencies: - - supports-color + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 20.17.24 ip-address@9.0.5: dependencies: @@ -3723,7 +3817,7 @@ snapshots: is-generator-function@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -3739,7 +3833,7 @@ snapshots: is-regex@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -3777,9 +3871,9 @@ snapshots: dependencies: tsscmp: 1.0.6 - keyv@5.2.3: + keyv@5.3.2: dependencies: - '@keyv/serialize': 1.0.2 + '@keyv/serialize': 1.0.3 koa-compose@4.1.0: {} @@ -3809,7 +3903,7 @@ snapshots: transitivePeerDependencies: - supports-color - koa@2.15.3: + koa@2.16.0: dependencies: accepts: 1.3.8 cache-content-type: 1.0.1 @@ -3847,10 +3941,6 @@ snapshots: dependencies: p-locate: 4.1.0 - lodash.defaults@4.2.0: {} - - lodash.isarguments@3.1.0: {} - lodash.startcase@4.4.0: {} lru-cache@6.0.0: @@ -3985,9 +4075,9 @@ snapshots: netmask@2.0.2: {} - node-abi@3.73.0: + node-abi@3.74.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 node-addon-api@7.1.1: {} @@ -4008,7 +4098,7 @@ snapshots: nopt: 5.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.6.3 + semver: 7.7.1 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -4023,7 +4113,7 @@ snapshots: ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 7.6.3 + semver: 7.7.1 simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.1 @@ -4036,7 +4126,7 @@ snapshots: normalize-path@3.0.0: {} - nostr-tools@2.10.4(typescript@5.7.3): + nostr-tools@2.11.0(typescript@5.8.2): dependencies: '@noble/ciphers': 0.5.3 '@noble/curves': 1.2.0 @@ -4046,7 +4136,7 @@ snapshots: '@scure/bip39': 1.2.1 optionalDependencies: nostr-wasm: 0.1.0 - typescript: 5.7.3 + typescript: 5.8.2 nostr-wasm@0.1.0: optional: true @@ -4059,23 +4149,23 @@ snapshots: set-blocking: 2.0.0 optional: true - nsite-cli@0.1.14(@types/node@20.17.14)(typescript@5.7.3): + nsite-cli@0.1.16(@types/node@20.17.24)(typescript@5.8.2): dependencies: '@noble/hashes': 1.7.1 - '@nostr-dev-kit/ndk': 2.11.0(typescript@5.7.3) - axios: 1.7.9(debug@4.4.0) + '@nostr-dev-kit/ndk': 2.12.2(typescript@5.8.2) + axios: 1.8.3(debug@4.4.0) blossom-client-sdk: 2.1.1 - commander: 12.1.0 + commander: 13.1.0 debug: 4.4.0(supports-color@5.5.0) dotenv: 16.4.7 - inquirer: 12.3.2(@types/node@20.17.14) + inquirer: 12.5.0(@types/node@20.17.24) inquirer-autocomplete-standalone: 0.8.1 mime-types: 2.1.35 node-fetch: 3.3.2 - nostr-tools: 2.10.4(typescript@5.7.3) + nostr-tools: 2.11.0(typescript@5.8.2) proxy-agent: 6.5.0 websocket-polyfill: 1.0.0 - ws: 8.18.0 + ws: 8.18.1 transitivePeerDependencies: - '@types/node' - bufferutil @@ -4103,19 +4193,19 @@ snapshots: outdent@0.5.0: {} - oxc-resolver@1.12.0: + oxc-resolver@5.0.0: optionalDependencies: - '@oxc-resolver/binding-darwin-arm64': 1.12.0 - '@oxc-resolver/binding-darwin-x64': 1.12.0 - '@oxc-resolver/binding-freebsd-x64': 1.12.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 1.12.0 - '@oxc-resolver/binding-linux-arm64-gnu': 1.12.0 - '@oxc-resolver/binding-linux-arm64-musl': 1.12.0 - '@oxc-resolver/binding-linux-x64-gnu': 1.12.0 - '@oxc-resolver/binding-linux-x64-musl': 1.12.0 - '@oxc-resolver/binding-wasm32-wasi': 1.12.0 - '@oxc-resolver/binding-win32-arm64-msvc': 1.12.0 - '@oxc-resolver/binding-win32-x64-msvc': 1.12.0 + '@oxc-resolver/binding-darwin-arm64': 5.0.0 + '@oxc-resolver/binding-darwin-x64': 5.0.0 + '@oxc-resolver/binding-freebsd-x64': 5.0.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 5.0.0 + '@oxc-resolver/binding-linux-arm64-gnu': 5.0.0 + '@oxc-resolver/binding-linux-arm64-musl': 5.0.0 + '@oxc-resolver/binding-linux-x64-gnu': 5.0.0 + '@oxc-resolver/binding-linux-x64-musl': 5.0.0 + '@oxc-resolver/binding-wasm32-wasi': 5.0.0 + '@oxc-resolver/binding-win32-arm64-msvc': 5.0.0 + '@oxc-resolver/binding-win32-x64-msvc': 5.0.0 p-filter@2.1.0: dependencies: @@ -4138,7 +4228,7 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.1.0: + pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.3 @@ -4156,7 +4246,9 @@ snapshots: degenerator: 5.0.1 netmask: 2.0.2 - package-manager-detector@0.2.8: {} + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.8 parent-module@1.0.1: dependencies: @@ -4197,7 +4289,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.73.0 + node-abi: 3.74.0 pump: 3.0.2 rc: 1.2.8 simple-get: 4.0.1 @@ -4206,7 +4298,7 @@ snapshots: prettier@2.8.8: {} - prettier@3.4.2: {} + prettier@3.5.3: {} progress@2.0.3: {} @@ -4226,7 +4318,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 - pac-proxy-agent: 7.1.0 + pac-proxy-agent: 7.2.0 proxy-from-env: 1.1.0 socks-proxy-agent: 8.0.5 transitivePeerDependencies: @@ -4248,18 +4340,18 @@ snapshots: debug: 4.4.0(supports-color@5.5.0) devtools-protocol: 0.0.1367902 typed-query-selector: 2.12.0 - ws: 8.18.0 + ws: 8.18.1 transitivePeerDependencies: - bare-buffer - bufferutil - supports-color - utf-8-validate - puppeteer@23.11.1(typescript@5.7.3): + puppeteer@23.11.1(typescript@5.8.2): dependencies: '@puppeteer/browsers': 2.6.1 chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) - cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig: 9.0.0(typescript@5.8.2) devtools-protocol: 0.0.1367902 puppeteer-core: 23.11.1 typed-query-selector: 2.12.0 @@ -4270,9 +4362,9 @@ snapshots: - typescript - utf-8-validate - queue-microtask@1.2.3: {} + quansync@0.2.8: {} - queue-tick@1.0.1: {} + queue-microtask@1.2.3: {} rc@1.2.8: dependencies: @@ -4298,11 +4390,14 @@ snapshots: dependencies: picomatch: 2.3.1 - redis-errors@1.2.0: {} - - redis-parser@3.0.0: + redis@4.7.0: dependencies: - redis-errors: 1.2.0 + '@redis/bloom': 1.2.0(@redis/client@1.6.0) + '@redis/client': 1.6.0 + '@redis/graph': 1.1.1(@redis/client@1.6.0) + '@redis/json': 1.0.7(@redis/client@1.6.0) + '@redis/search': 1.2.0(@redis/client@1.6.0) + '@redis/time-series': 1.1.0(@redis/client@1.6.0) regenerator-runtime@0.14.1: {} @@ -4320,7 +4415,7 @@ snapshots: retry@0.12.0: optional: true - reusify@1.0.4: {} + reusify@1.1.0: {} rimraf@3.0.2: dependencies: @@ -4333,7 +4428,7 @@ snapshots: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.1: + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -4343,13 +4438,13 @@ snapshots: safe-regex-test@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-regex: 1.2.1 safer-buffer@2.1.2: {} - semver@7.6.3: {} + semver@7.7.1: {} set-blocking@2.0.0: optional: true @@ -4379,7 +4474,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 slash@3.0.0: {} @@ -4389,7 +4484,7 @@ snapshots: dependencies: agent-base: 6.0.2 debug: 4.4.0(supports-color@5.5.0) - socks: 2.8.3 + socks: 2.8.4 transitivePeerDependencies: - supports-color optional: true @@ -4398,11 +4493,11 @@ snapshots: dependencies: agent-base: 7.1.3 debug: 4.4.0(supports-color@5.5.0) - socks: 2.8.3 + socks: 2.8.4 transitivePeerDependencies: - supports-color - socks@2.8.3: + socks@2.8.4: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 @@ -4440,14 +4535,11 @@ snapshots: minipass: 3.3.6 optional: true - standard-as-callback@2.1.0: {} - statuses@1.5.0: {} - streamx@2.21.1: + streamx@2.22.0: dependencies: fast-fifo: 1.3.2 - queue-tick: 1.0.1 text-decoder: 1.2.3 optionalDependencies: bare-events: 2.5.4 @@ -4507,7 +4599,7 @@ snapshots: dependencies: b4a: 1.6.7 fast-fifo: 1.3.2 - streamx: 2.21.1 + streamx: 2.22.0 tar@6.2.1: dependencies: @@ -4561,7 +4653,7 @@ snapshots: typescript-lru-cache@2.0.0: {} - typescript@5.7.3: {} + typescript@5.8.2: {} unbzip2-stream@1.4.3: dependencies: @@ -4596,7 +4688,7 @@ snapshots: dependencies: import2: 1.0.3 tstl: 2.5.16 - ws: 8.18.0 + ws: 8.18.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -4624,7 +4716,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.18.0: {} + ws@8.18.1: {} xbytes@1.9.1: {} diff --git a/src/blossom.ts b/src/blossom.ts index 5f56c7b..63bd19d 100644 --- a/src/blossom.ts +++ b/src/blossom.ts @@ -1,21 +1,13 @@ import { IncomingMessage } from "node:http"; -import { getServersFromServerListEvent, USER_BLOSSOM_SERVER_LIST_KIND } from "blossom-client-sdk"; import { BLOSSOM_SERVERS, MAX_FILE_SIZE } from "./env.js"; import { makeRequestWithAbort } from "./helpers/http.js"; -import pool from "./nostr.js"; - -export async function getUserBlossomServers(pubkey: string, relays: string[]) { - const blossomServersEvent = await pool.get(relays, { kinds: [USER_BLOSSOM_SERVER_LIST_KIND], authors: [pubkey] }); - - return blossomServersEvent ? getServersFromServerListEvent(blossomServersEvent).map((u) => u.toString()) : undefined; -} /** * Downloads a file from multiple servers * @todo download the file to /tmp and verify it */ -export function downloadFile(sha256: string, servers = BLOSSOM_SERVERS): Promise { +export function downloadBlob(sha256: string, servers = BLOSSOM_SERVERS): Promise { return new Promise((resolve, reject) => { const controllers = new Map(); diff --git a/src/events.ts b/src/events.ts index cf7ba74..fc1ac90 100644 --- a/src/events.ts +++ b/src/events.ts @@ -1,4 +1,4 @@ -import { extname, isAbsolute, join } from "path"; +import { extname, join } from "path"; import { NSITE_KIND } from "./const.js"; import { requestEvents } from "./nostr.js"; @@ -11,7 +11,7 @@ export function getSearchPaths(path: string) { return paths.filter((p) => !!p); } -export function parseNsiteEvent(event: { pubkey: string; tags: string[][] }) { +export function parseNsiteEvent(event: { pubkey: string; tags: string[][]; created_at: number }) { const path = event.tags.find((t) => t[0] === "d" && t[1])?.[1]; const sha256 = event.tags.find((t) => t[0] === "x" && t[1])?.[1]; @@ -20,6 +20,7 @@ export function parseNsiteEvent(event: { pubkey: string; tags: string[][] }) { pubkey: event.pubkey, path: join("/", path), sha256, + created_at: event.created_at, }; } diff --git a/src/index.ts b/src/index.ts index 65ff91d..ccc6fe6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,13 +14,12 @@ import { spawn } from "node:child_process"; import { nip19 } from "nostr-tools"; import { resolveNpubFromHostname } from "./helpers/dns.js"; -import { getNsiteBlobs, parseNsiteEvent } from "./events.js"; -import { downloadFile, getUserBlossomServers } from "./blossom.js"; +import { getNsiteBlobs } from "./events.js"; +import { downloadBlob } from "./blossom.js"; import { BLOSSOM_SERVERS, ENABLE_SCREENSHOTS, HOST, - NGINX_CACHE_DIR, NSITE_HOMEPAGE, NSITE_HOMEPAGE_DIR, NSITE_HOST, @@ -29,9 +28,9 @@ import { SUBSCRIPTION_RELAYS, } from "./env.js"; import { userDomains, userRelays, userServers } from "./cache.js"; -import { invalidatePubkeyPath } from "./nginx.js"; -import pool, { getUserOutboxes, subscribeForEvents } from "./nostr.js"; +import pool, { getUserBlossomServers, getUserOutboxes } from "./nostr.js"; import logger from "./logger.js"; +import { watchInvalidation } from "./invalidation.js"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -79,96 +78,100 @@ app.use(async (ctx, next) => { } } - if (pubkey) { - const npub = npubEncode(pubkey); - const log = logger.extend(npub); - ctx.state.pubkey = pubkey; + if (!pubkey) return await next(); - let relays = await userRelays.get(pubkey); + const npub = npubEncode(pubkey); + const log = logger.extend(npub); + ctx.state.pubkey = pubkey; - // fetch relays if not in cache - if (!relays) { - log(`Fetching relays`); + let relays = await userRelays.get(pubkey); - relays = await getUserOutboxes(pubkey); - if (relays) { - await userRelays.set(pubkey, relays); - log(`Found ${relays.length} relays`); - } else { - relays = []; - await userServers.set(pubkey, [], 30_000); - log(`Failed to find relays`); - } + // fetch relays if not in cache + if (!relays) { + log(`Fetching relays`); + + relays = await getUserOutboxes(pubkey); + if (relays) { + await userRelays.set(pubkey, relays); + log(`Found ${relays.length} relays`); + } else { + relays = []; + await userServers.set(pubkey, [], 30_000); + log(`Failed to find relays`); + } + } + + // always check subscription relays + relays.push(...SUBSCRIPTION_RELAYS); + + if (relays.length === 0) throw new Error("No nostr relays"); + + log(`Searching for ${ctx.path}`); + let blobs = await getNsiteBlobs(pubkey, ctx.path, relays); + + if (blobs.length === 0) { + // fallback to custom 404 page + log(`Looking for custom 404 page`); + blobs = await getNsiteBlobs(pubkey, "/404.html", relays); + } + + if (blobs.length === 0) { + log(`Found 0 events`); + ctx.status = 404; + ctx.body = "Not Found"; + return; + } + + let servers = await userServers.get(pubkey); + + // fetch blossom servers if not in cache + if (!servers) { + log(`Fetching blossom servers`); + servers = await getUserBlossomServers(pubkey, relays); + + if (servers) { + await userServers.set(pubkey, servers); + log(`Found ${servers.length} servers`); + } else { + servers = []; + await userServers.set(pubkey, [], 30_000); + log(`Failed to find servers`); + } + } + + // always fetch from additional servers + servers.push(...BLOSSOM_SERVERS); + + for (const blob of blobs) { + const res = await downloadBlob(blob.sha256, servers); + if (!res) continue; + + const type = mime.getType(blob.path); + if (type) ctx.set("content-type", type); + else if (res.headers["content-type"]) ctx.set("content-type", res.headers["content-type"]); + + // pass headers along + if (res.headers["content-length"]) ctx.set("content-length", res.headers["content-length"]); + + // set Onion-Location header + if (ONION_HOST) { + const url = new URL(ONION_HOST); + url.hostname = npubEncode(pubkey) + "." + url.hostname; + ctx.set("Onion-Location", url.toString().replace(/\/$/, "")); } - relays.push(...SUBSCRIPTION_RELAYS); + // add cache headers + ctx.set("ETag", res.headers["etag"] || `"${blob.sha256}"`); + ctx.set("Cache-Control", "public, max-age=3600"); + ctx.set("Last-Modified", res.headers["last-modified"] || new Date(blob.created_at * 1000).toUTCString()); - if (relays.length === 0) throw new Error("No nostr relays"); + ctx.status = 200; + ctx.body = res; + return; + } - log(`Searching for ${ctx.path}`); - let blobs = await getNsiteBlobs(pubkey, ctx.path, relays); - - if (blobs.length === 0) { - // fallback to custom 404 page - log(`Looking for custom 404 page`); - blobs = await getNsiteBlobs(pubkey, "/404.html", relays); - } - - if (blobs.length === 0) { - log(`Found 0 events`); - ctx.status = 404; - ctx.body = "Not Found"; - return; - } - - let servers = await userServers.get(pubkey); - - // fetch blossom servers if not in cache - if (!servers) { - log(`Fetching blossom servers`); - servers = await getUserBlossomServers(pubkey, relays); - - if (servers) { - await userServers.set(pubkey, servers); - log(`Found ${servers.length} servers`); - } else { - servers = []; - await userServers.set(pubkey, [], 30_000); - log(`Failed to find servers`); - } - } - - // always fetch from additional servers - servers.push(...BLOSSOM_SERVERS); - - for (const blob of blobs) { - const res = await downloadFile(blob.sha256, servers); - - if (res) { - const type = mime.getType(blob.path); - if (type) ctx.set("content-type", type); - else if (res.headers["content-type"]) ctx.set("content-type", res.headers["content-type"]); - - // pass headers along - if (res.headers["content-length"]) ctx.set("content-length", res.headers["content-length"]); - if (res.headers["last-modified"]) ctx.set("last-modified", res.headers["last-modified"]); - - // set Onion-Location header - if (ONION_HOST) { - const url = new URL(ONION_HOST); - url.hostname = npubEncode(pubkey) + "." + url.hostname; - ctx.set("Onion-Location", url.toString().replace(/\/$/, "")); - } - - ctx.status = 200; - ctx.body = res; - return; - } - } - - ctx.status = 500; - ctx.body = "Failed to find blob"; - } else await next(); + ctx.status = 500; + ctx.body = "Failed to find blob"; }); if (ONION_HOST) { @@ -247,35 +250,13 @@ try { app.use(serve(www, serveOptions)); } +// start the server app.listen({ host: NSITE_HOST, port: NSITE_PORT }, () => { logger("Started on port", HOST); }); -// invalidate nginx cache and screenshots on new events -if (SUBSCRIPTION_RELAYS.length > 0) { - logger(`Listening for new nsite events on: ${SUBSCRIPTION_RELAYS.join(", ")}`); - - subscribeForEvents(SUBSCRIPTION_RELAYS, async (event) => { - try { - const nsite = parseNsiteEvent(event); - if (nsite) { - const log = logger.extend(nip19.npubEncode(nsite.pubkey)); - if (NGINX_CACHE_DIR) { - log(`Invalidating ${nsite.path}`); - await invalidatePubkeyPath(nsite.pubkey, nsite.path); - } - - // invalidate screenshot for nsite - if (ENABLE_SCREENSHOTS && (nsite.path === "/" || nsite.path === "/index.html")) { - const { removeScreenshot } = await import("./screenshots.js"); - await removeScreenshot(nsite.pubkey); - } - } - } catch (error) { - console.log(`Failed to invalidate ${event.id}`); - } - }); -} +// watch for invalidations +watchInvalidation(); process.on("unhandledRejection", (reason, promise) => { console.error("Unhandled Rejection at:", promise, "reason:", reason); diff --git a/src/invalidation.ts b/src/invalidation.ts new file mode 100644 index 0000000..b4f2a05 --- /dev/null +++ b/src/invalidation.ts @@ -0,0 +1,38 @@ +import { nip19 } from "nostr-tools"; + +import { ENABLE_SCREENSHOTS, NGINX_CACHE_DIR, SUBSCRIPTION_RELAYS } from "./env.js"; +import { parseNsiteEvent } from "./events.js"; +import pool from "./nostr.js"; +import { invalidatePubkeyPath } from "./nginx.js"; +import { NSITE_KIND } from "./const.js"; +import logger from "./logger.js"; + +export function watchInvalidation() { + // invalidate nginx cache and screenshots on new events + if (SUBSCRIPTION_RELAYS.length > 0) { + logger(`Listening for new nsite events on: ${SUBSCRIPTION_RELAYS.join(", ")}`); + + pool.subscribeMany(SUBSCRIPTION_RELAYS, [{ kinds: [NSITE_KIND], since: Math.round(Date.now() / 1000) - 60 * 60 }], { + onevent: async (event) => { + try { + const nsite = parseNsiteEvent(event); + if (nsite) { + const log = logger.extend(nip19.npubEncode(nsite.pubkey)); + if (NGINX_CACHE_DIR) { + log(`Invalidating ${nsite.path}`); + await invalidatePubkeyPath(nsite.pubkey, nsite.path); + } + + // invalidate screenshot for nsite + if (ENABLE_SCREENSHOTS && (nsite.path === "/" || nsite.path === "/index.html")) { + const { removeScreenshot } = await import("./screenshots.js"); + await removeScreenshot(nsite.pubkey); + } + } + } catch (error) { + console.log(`Failed to invalidate ${event.id}`); + } + }, + }); + } +} diff --git a/src/nostr.ts b/src/nostr.ts index fa05ac9..664e105 100644 --- a/src/nostr.ts +++ b/src/nostr.ts @@ -1,6 +1,7 @@ import { Filter, NostrEvent, SimplePool } from "nostr-tools"; +import { getServersFromServerListEvent, USER_BLOSSOM_SERVER_LIST_KIND } from "blossom-client-sdk"; + import { LOOKUP_RELAYS } from "./env.js"; -import { NSITE_KIND } from "./const.js"; const pool = new SimplePool(); @@ -11,10 +12,10 @@ export async function getUserOutboxes(pubkey: string) { return mailboxes.tags.filter((t) => t[0] === "r" && (t[2] === undefined || t[2] === "write")).map((t) => t[1]); } -export function subscribeForEvents(relays: string[], onevent: (event: NostrEvent) => any) { - return pool.subscribeMany(relays, [{ kinds: [NSITE_KIND], since: Math.round(Date.now() / 1000) - 60 * 60 }], { - onevent, - }); +export async function getUserBlossomServers(pubkey: string, relays: string[]) { + const blossomServersEvent = await pool.get(relays, { kinds: [USER_BLOSSOM_SERVER_LIST_KIND], authors: [pubkey] }); + + return blossomServersEvent ? getServersFromServerListEvent(blossomServersEvent).map((u) => u.toString()) : undefined; } export function requestEvents(relays: string[], filter: Filter) {