From 13684a25f9bedc0203e4b59876ee3cb83968257e Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 23 Jul 2026 14:35:38 -0400 Subject: [PATCH 01/17] fresh-install --- .npmrc | 1 + package-lock.json | 1061 +- package.json | 2 + packages/bitcore-build/package-lock.json | 138 +- packages/bitcore-client/package.json | 11 +- packages/bitcore-lib-cash/package-lock.json | 138 +- packages/bitcore-lib-doge/package-lock.json | 138 +- packages/bitcore-lib-ltc/package-lock.json | 138 +- packages/bitcore-lib/package-lock.json | 138 +- packages/bitcore-mnemonic/package-lock.json | 1106 ++ packages/bitcore-p2p-cash/package-lock.json | 138 +- packages/bitcore-p2p/package-lock.json | 138 +- packages/crypto-rpc/package-lock.json | 10818 +++++++----------- 13 files changed, 6777 insertions(+), 7188 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000000..97b895e2f96 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +ignore-scripts=true diff --git a/package-lock.json b/package-lock.json index 3262cfda315..38ce1a8be82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,8 @@ }, "devDependencies": { "@eslint/js": "^9.37.0", + "@lavamoat/allow-scripts": "^5.1.0", + "@lavamoat/preinstall-always-fail": "^3.0.0", "@stylistic/eslint-plugin": "^5.5.0", "@types/node": "22.13.1", "cz-customizable": "^5.2.0", @@ -586,6 +588,16 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@gar/promise-retry": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.3.tgz", + "integrity": "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -702,217 +714,928 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "license": "MIT" + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@isaacs/fs-minipass/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "license": "ISC" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lavamoat/aa": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@lavamoat/aa/-/aa-5.0.1.tgz", + "integrity": "sha512-wO6gyVFYlart7QiCQ3mgmcrYBEKUz1ip95/4DwL2/9rGvtdfbNR1Be+F+moA5RpueX26byFkLAHvntSlyXuGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "1.22.12" + }, + "bin": { + "lavamoat-ls": "src/cli.js" + }, + "engines": { + "node": "^20.19.0 || ^22.5.1 || ^24.0.0" + } + }, + "node_modules/@lavamoat/allow-scripts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@lavamoat/allow-scripts/-/allow-scripts-5.1.0.tgz", + "integrity": "sha512-x00YE+hIoak1mrP3w/OZSGXaYTel2oRF0eqIT50G40aa7qqv5EcSzOQKLm1LJyzp0HGFCMXev/LvVUeqPnqI7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lavamoat/aa": "^5.0.1", + "@npmcli/run-script": "10.0.4", + "bin-links": "4.0.4", + "npm-normalize-package-bin": "3.0.1", + "type-fest": "4.41.0", + "yargs": "17.7.3" + }, + "bin": { + "allow-scripts": "src/cli.js" + }, + "engines": { + "node": "^20.19.0 || ^22.5.1 || ^24.0.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/@npmcli/git": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", + "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/@npmcli/package-json": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.5.tgz", + "integrity": "sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/@npmcli/run-script": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz", + "integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/bin-links": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", + "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/cmd-shim": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", + "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/hosted-git-info": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz", + "integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/node-gyp": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", + "integrity": "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/npm-package-arg": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", + "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@lavamoat/allow-scripts/node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@lavamoat/allow-scripts/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "node_modules/@lavamoat/allow-scripts/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@lavamoat/allow-scripts/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "license": "ISC" - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@lavamoat/allow-scripts/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@lavamoat/allow-scripts/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@lavamoat/allow-scripts/node_modules/tar": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", + "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "p-locate": "^4.1.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@lavamoat/allow-scripts/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=6" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@lavamoat/allow-scripts/node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/@lavamoat/allow-scripts/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/@lavamoat/allow-scripts/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "node_modules/@lavamoat/allow-scripts/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@lavamoat/allow-scripts/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@lavamoat/allow-scripts/node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@lavamoat/allow-scripts/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@lavamoat/preinstall-always-fail": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@lavamoat/preinstall-always-fail/-/preinstall-always-fail-3.0.0.tgz", + "integrity": "sha512-O2TfrjwX0GbMtdtbtZn9RVHoNBkaX3pdsSRUFU9AYGeHcqEJA5AAQLg7JLIjeQs/D83uDvB+KptdA9vlVIBeMA==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "engines": { + "node": "^20.19.0 || ^22.5.1 || ^24.0.0" } }, "node_modules/@lerna/add": { @@ -15029,11 +15752,13 @@ "license": "ISC" }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -16318,6 +17043,54 @@ "node": ">= 6" } }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -16668,6 +17441,16 @@ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, + "node_modules/undici": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz", + "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", diff --git a/package.json b/package.json index f648009defb..57c41a01513 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,8 @@ }, "devDependencies": { "@eslint/js": "^9.37.0", + "@lavamoat/allow-scripts": "^5.1.0", + "@lavamoat/preinstall-always-fail": "^3.0.0", "@stylistic/eslint-plugin": "^5.5.0", "@types/node": "22.13.1", "cz-customizable": "^5.2.0", diff --git a/packages/bitcore-build/package-lock.json b/packages/bitcore-build/package-lock.json index 84fa9206fe3..70094f9eba7 100644 --- a/packages/bitcore-build/package-lock.json +++ b/packages/bitcore-build/package-lock.json @@ -9706,14 +9706,14 @@ }, "node_modules/fsevents/node_modules/abbrev": { "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ansi-regex": { "version": "2.1.1", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -9721,14 +9721,14 @@ }, "node_modules/fsevents/node_modules/aproba": { "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/are-we-there-yet": { "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "delegates": "^1.0.0", @@ -9737,14 +9737,14 @@ }, "node_modules/fsevents/node_modules/balanced-match": { "version": "1.0.0", - "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/brace-expansion": { "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -9753,14 +9753,14 @@ }, "node_modules/fsevents/node_modules/chownr": { "version": "1.1.3", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/code-point-at": { "version": "1.1.0", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -9768,27 +9768,26 @@ }, "node_modules/fsevents/node_modules/concat-map": { "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/console-control-strings": { "version": "1.1.0", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/core-util-is": { "version": "1.0.2", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/debug": { "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -9796,8 +9795,8 @@ }, "node_modules/fsevents/node_modules/deep-extend": { "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -9805,14 +9804,14 @@ }, "node_modules/fsevents/node_modules/delegates": { "version": "1.0.0", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/detect-libc": { "version": "1.0.3", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "inBundle": true, + "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -9823,8 +9822,8 @@ }, "node_modules/fsevents/node_modules/fs-minipass": { "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minipass": "^2.6.0" @@ -9832,14 +9831,14 @@ }, "node_modules/fsevents/node_modules/fs.realpath": { "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/gauge": { "version": "2.7.4", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "aproba": "^1.0.3", @@ -9854,8 +9853,8 @@ }, "node_modules/fsevents/node_modules/glob": { "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -9874,14 +9873,14 @@ }, "node_modules/fsevents/node_modules/has-unicode": { "version": "2.0.1", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/iconv-lite": { "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -9892,8 +9891,8 @@ }, "node_modules/fsevents/node_modules/ignore-walk": { "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minimatch": "^3.0.4" @@ -9901,8 +9900,8 @@ }, "node_modules/fsevents/node_modules/inflight": { "version": "1.0.6", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "once": "^1.3.0", @@ -9911,15 +9910,14 @@ }, "node_modules/fsevents/node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ini": { "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", "inBundle": true, + "license": "ISC", "optional": true, "engines": { "node": "*" @@ -9927,8 +9925,8 @@ }, "node_modules/fsevents/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -9939,14 +9937,14 @@ }, "node_modules/fsevents/node_modules/isarray": { "version": "1.0.0", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minimatch": { "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -9957,14 +9955,14 @@ }, "node_modules/fsevents/node_modules/minimist": { "version": "0.0.8", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minipass": { "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "safe-buffer": "^5.1.2", @@ -9973,8 +9971,8 @@ }, "node_modules/fsevents/node_modules/minizlib": { "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minipass": "^2.9.0" @@ -9982,9 +9980,8 @@ }, "node_modules/fsevents/node_modules/mkdirp": { "version": "0.5.1", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "0.0.8" @@ -9995,14 +9992,14 @@ }, "node_modules/fsevents/node_modules/ms": { "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/needle": { "version": "2.4.0", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -10018,9 +10015,8 @@ }, "node_modules/fsevents/node_modules/node-pre-gyp": { "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", "inBundle": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "detect-libc": "^1.0.2", @@ -10040,8 +10036,8 @@ }, "node_modules/fsevents/node_modules/nopt": { "version": "4.0.1", - "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "abbrev": "1", @@ -10053,8 +10049,8 @@ }, "node_modules/fsevents/node_modules/npm-bundled": { "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" @@ -10062,14 +10058,14 @@ }, "node_modules/fsevents/node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/npm-packlist": { "version": "1.4.7", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "ignore-walk": "^3.0.1", @@ -10078,8 +10074,8 @@ }, "node_modules/fsevents/node_modules/npmlog": { "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", @@ -10090,8 +10086,8 @@ }, "node_modules/fsevents/node_modules/number-is-nan": { "version": "1.0.1", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -10099,8 +10095,8 @@ }, "node_modules/fsevents/node_modules/object-assign": { "version": "4.1.1", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -10108,8 +10104,8 @@ }, "node_modules/fsevents/node_modules/once": { "version": "1.4.0", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "wrappy": "1" @@ -10117,8 +10113,8 @@ }, "node_modules/fsevents/node_modules/os-homedir": { "version": "1.0.2", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -10126,8 +10122,8 @@ }, "node_modules/fsevents/node_modules/os-tmpdir": { "version": "1.0.2", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -10135,8 +10131,8 @@ }, "node_modules/fsevents/node_modules/osenv": { "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "os-homedir": "^1.0.0", @@ -10145,8 +10141,8 @@ }, "node_modules/fsevents/node_modules/path-is-absolute": { "version": "1.0.1", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -10154,14 +10150,14 @@ }, "node_modules/fsevents/node_modules/process-nextick-args": { "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/rc": { "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -10175,14 +10171,14 @@ }, "node_modules/fsevents/node_modules/rc/node_modules/minimist": { "version": "1.2.0", - "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/readable-stream": { "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10196,8 +10192,8 @@ }, "node_modules/fsevents/node_modules/rimraf": { "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -10208,26 +10204,26 @@ }, "node_modules/fsevents/node_modules/safe-buffer": { "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/safer-buffer": { "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/sax": { "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/semver": { "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "inBundle": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -10235,20 +10231,20 @@ }, "node_modules/fsevents/node_modules/set-blocking": { "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/signal-exit": { "version": "3.0.2", - "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/string_decoder": { "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -10256,8 +10252,8 @@ }, "node_modules/fsevents/node_modules/string-width": { "version": "1.0.2", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "code-point-at": "^1.0.0", @@ -10270,8 +10266,8 @@ }, "node_modules/fsevents/node_modules/strip-ansi": { "version": "3.0.1", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -10282,8 +10278,8 @@ }, "node_modules/fsevents/node_modules/strip-json-comments": { "version": "2.0.1", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -10291,8 +10287,8 @@ }, "node_modules/fsevents/node_modules/tar": { "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -10309,14 +10305,14 @@ }, "node_modules/fsevents/node_modules/util-deprecate": { "version": "1.0.2", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/wide-align": { "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "string-width": "^1.0.2 || 2" @@ -10324,14 +10320,14 @@ }, "node_modules/fsevents/node_modules/wrappy": { "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/yallist": { "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/function-bind": { diff --git a/packages/bitcore-client/package.json b/packages/bitcore-client/package.json index 28b8ed1786b..804128a327b 100644 --- a/packages/bitcore-client/package.json +++ b/packages/bitcore-client/package.json @@ -67,5 +67,14 @@ "tsx": "^4.21.0", "typescript": "5.7.3" }, - "gitHead": "e091d99915d099863ad3e78dbe867aa7780191e4" + "gitHead": "e091d99915d099863ad3e78dbe867aa7780191e4", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "bcrypt#5.1.0": true, + "leveldown#6.1.1": false, + "secp256k1#3.7.1": false, + "tsx>esbuild#0.27.3": false + } + } } diff --git a/packages/bitcore-lib-cash/package-lock.json b/packages/bitcore-lib-cash/package-lock.json index 0160cdb8d85..7874e49680c 100644 --- a/packages/bitcore-lib-cash/package-lock.json +++ b/packages/bitcore-lib-cash/package-lock.json @@ -1718,16 +1718,16 @@ }, "node_modules/fsevents/node_modules/abbrev": { "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ansi-regex": { "version": "2.1.1", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1735,16 +1735,16 @@ }, "node_modules/fsevents/node_modules/aproba": { "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/are-we-there-yet": { "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "delegates": "^1.0.0", @@ -1753,16 +1753,16 @@ }, "node_modules/fsevents/node_modules/balanced-match": { "version": "1.0.0", - "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/brace-expansion": { "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -1771,16 +1771,16 @@ }, "node_modules/fsevents/node_modules/chownr": { "version": "1.1.3", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/code-point-at": { "version": "1.1.0", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1788,31 +1788,30 @@ }, "node_modules/fsevents/node_modules/concat-map": { "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/console-control-strings": { "version": "1.1.0", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/core-util-is": { "version": "1.0.2", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/debug": { "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -1820,9 +1819,9 @@ }, "node_modules/fsevents/node_modules/deep-extend": { "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -1830,16 +1829,16 @@ }, "node_modules/fsevents/node_modules/delegates": { "version": "1.0.0", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/detect-libc": { "version": "1.0.3", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, "inBundle": true, + "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -1850,9 +1849,9 @@ }, "node_modules/fsevents/node_modules/fs-minipass": { "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minipass": "^2.6.0" @@ -1860,16 +1859,16 @@ }, "node_modules/fsevents/node_modules/fs.realpath": { "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/gauge": { "version": "2.7.4", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "aproba": "^1.0.3", @@ -1884,9 +1883,9 @@ }, "node_modules/fsevents/node_modules/glob": { "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -1905,16 +1904,16 @@ }, "node_modules/fsevents/node_modules/has-unicode": { "version": "2.0.1", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/iconv-lite": { "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -1925,9 +1924,9 @@ }, "node_modules/fsevents/node_modules/ignore-walk": { "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minimatch": "^3.0.4" @@ -1935,9 +1934,9 @@ }, "node_modules/fsevents/node_modules/inflight": { "version": "1.0.6", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "once": "^1.3.0", @@ -1946,17 +1945,16 @@ }, "node_modules/fsevents/node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ini": { "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "engines": { "node": "*" @@ -1964,9 +1962,9 @@ }, "node_modules/fsevents/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -1977,16 +1975,16 @@ }, "node_modules/fsevents/node_modules/isarray": { "version": "1.0.0", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minimatch": { "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1997,16 +1995,16 @@ }, "node_modules/fsevents/node_modules/minimist": { "version": "0.0.8", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minipass": { "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "safe-buffer": "^5.1.2", @@ -2015,9 +2013,9 @@ }, "node_modules/fsevents/node_modules/minizlib": { "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minipass": "^2.9.0" @@ -2025,10 +2023,9 @@ }, "node_modules/fsevents/node_modules/mkdirp": { "version": "0.5.1", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "0.0.8" @@ -2039,16 +2036,16 @@ }, "node_modules/fsevents/node_modules/ms": { "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/needle": { "version": "2.4.0", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -2064,10 +2061,9 @@ }, "node_modules/fsevents/node_modules/node-pre-gyp": { "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", "dev": true, "inBundle": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "detect-libc": "^1.0.2", @@ -2087,9 +2083,9 @@ }, "node_modules/fsevents/node_modules/nopt": { "version": "4.0.1", - "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "abbrev": "1", @@ -2101,9 +2097,9 @@ }, "node_modules/fsevents/node_modules/npm-bundled": { "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" @@ -2111,16 +2107,16 @@ }, "node_modules/fsevents/node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/npm-packlist": { "version": "1.4.7", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "ignore-walk": "^3.0.1", @@ -2129,9 +2125,9 @@ }, "node_modules/fsevents/node_modules/npmlog": { "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", @@ -2142,9 +2138,9 @@ }, "node_modules/fsevents/node_modules/number-is-nan": { "version": "1.0.1", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2152,9 +2148,9 @@ }, "node_modules/fsevents/node_modules/object-assign": { "version": "4.1.1", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2162,9 +2158,9 @@ }, "node_modules/fsevents/node_modules/once": { "version": "1.4.0", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "wrappy": "1" @@ -2172,9 +2168,9 @@ }, "node_modules/fsevents/node_modules/os-homedir": { "version": "1.0.2", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2182,9 +2178,9 @@ }, "node_modules/fsevents/node_modules/os-tmpdir": { "version": "1.0.2", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2192,9 +2188,9 @@ }, "node_modules/fsevents/node_modules/osenv": { "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "os-homedir": "^1.0.0", @@ -2203,9 +2199,9 @@ }, "node_modules/fsevents/node_modules/path-is-absolute": { "version": "1.0.1", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2213,16 +2209,16 @@ }, "node_modules/fsevents/node_modules/process-nextick-args": { "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/rc": { "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -2236,16 +2232,16 @@ }, "node_modules/fsevents/node_modules/rc/node_modules/minimist": { "version": "1.2.0", - "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/readable-stream": { "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2259,9 +2255,9 @@ }, "node_modules/fsevents/node_modules/rimraf": { "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -2272,30 +2268,30 @@ }, "node_modules/fsevents/node_modules/safe-buffer": { "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/safer-buffer": { "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/sax": { "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/semver": { "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -2303,23 +2299,23 @@ }, "node_modules/fsevents/node_modules/set-blocking": { "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/signal-exit": { "version": "3.0.2", - "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/string_decoder": { "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -2327,9 +2323,9 @@ }, "node_modules/fsevents/node_modules/string-width": { "version": "1.0.2", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "code-point-at": "^1.0.0", @@ -2342,9 +2338,9 @@ }, "node_modules/fsevents/node_modules/strip-ansi": { "version": "3.0.1", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -2355,9 +2351,9 @@ }, "node_modules/fsevents/node_modules/strip-json-comments": { "version": "2.0.1", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2365,9 +2361,9 @@ }, "node_modules/fsevents/node_modules/tar": { "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -2384,16 +2380,16 @@ }, "node_modules/fsevents/node_modules/util-deprecate": { "version": "1.0.2", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/wide-align": { "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "string-width": "^1.0.2 || 2" @@ -2401,16 +2397,16 @@ }, "node_modules/fsevents/node_modules/wrappy": { "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/yallist": { "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/function-bind": { diff --git a/packages/bitcore-lib-doge/package-lock.json b/packages/bitcore-lib-doge/package-lock.json index 94b30bf8bfd..e7fd1a084ea 100644 --- a/packages/bitcore-lib-doge/package-lock.json +++ b/packages/bitcore-lib-doge/package-lock.json @@ -1709,16 +1709,16 @@ }, "node_modules/fsevents/node_modules/abbrev": { "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ansi-regex": { "version": "2.1.1", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1726,16 +1726,16 @@ }, "node_modules/fsevents/node_modules/aproba": { "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/are-we-there-yet": { "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "delegates": "^1.0.0", @@ -1744,16 +1744,16 @@ }, "node_modules/fsevents/node_modules/balanced-match": { "version": "1.0.0", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/brace-expansion": { "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -1762,16 +1762,16 @@ }, "node_modules/fsevents/node_modules/chownr": { "version": "1.1.3", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/code-point-at": { "version": "1.1.0", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1779,31 +1779,30 @@ }, "node_modules/fsevents/node_modules/concat-map": { "version": "0.0.1", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/console-control-strings": { "version": "1.1.0", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/core-util-is": { "version": "1.0.2", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/debug": { "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -1811,9 +1810,9 @@ }, "node_modules/fsevents/node_modules/deep-extend": { "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -1821,16 +1820,16 @@ }, "node_modules/fsevents/node_modules/delegates": { "version": "1.0.0", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/detect-libc": { "version": "1.0.3", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "inBundle": true, + "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -1841,9 +1840,9 @@ }, "node_modules/fsevents/node_modules/fs-minipass": { "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minipass": "^2.6.0" @@ -1851,16 +1850,16 @@ }, "node_modules/fsevents/node_modules/fs.realpath": { "version": "1.0.0", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/gauge": { "version": "2.7.4", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "aproba": "^1.0.3", @@ -1875,9 +1874,9 @@ }, "node_modules/fsevents/node_modules/glob": { "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -1896,16 +1895,16 @@ }, "node_modules/fsevents/node_modules/has-unicode": { "version": "2.0.1", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/iconv-lite": { "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -1916,9 +1915,9 @@ }, "node_modules/fsevents/node_modules/ignore-walk": { "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minimatch": "^3.0.4" @@ -1926,9 +1925,9 @@ }, "node_modules/fsevents/node_modules/inflight": { "version": "1.0.6", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "once": "^1.3.0", @@ -1937,17 +1936,16 @@ }, "node_modules/fsevents/node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ini": { "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "engines": { "node": "*" @@ -1955,9 +1953,9 @@ }, "node_modules/fsevents/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -1968,16 +1966,16 @@ }, "node_modules/fsevents/node_modules/isarray": { "version": "1.0.0", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minimatch": { "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1988,16 +1986,16 @@ }, "node_modules/fsevents/node_modules/minimist": { "version": "0.0.8", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minipass": { "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "safe-buffer": "^5.1.2", @@ -2006,9 +2004,9 @@ }, "node_modules/fsevents/node_modules/minizlib": { "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minipass": "^2.9.0" @@ -2016,10 +2014,9 @@ }, "node_modules/fsevents/node_modules/mkdirp": { "version": "0.5.1", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "0.0.8" @@ -2030,16 +2027,16 @@ }, "node_modules/fsevents/node_modules/ms": { "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/needle": { "version": "2.4.0", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -2055,10 +2052,9 @@ }, "node_modules/fsevents/node_modules/node-pre-gyp": { "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", "dev": true, "inBundle": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "detect-libc": "^1.0.2", @@ -2078,9 +2074,9 @@ }, "node_modules/fsevents/node_modules/nopt": { "version": "4.0.1", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "abbrev": "1", @@ -2092,9 +2088,9 @@ }, "node_modules/fsevents/node_modules/npm-bundled": { "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" @@ -2102,16 +2098,16 @@ }, "node_modules/fsevents/node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/npm-packlist": { "version": "1.4.7", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "ignore-walk": "^3.0.1", @@ -2120,9 +2116,9 @@ }, "node_modules/fsevents/node_modules/npmlog": { "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", @@ -2133,9 +2129,9 @@ }, "node_modules/fsevents/node_modules/number-is-nan": { "version": "1.0.1", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2143,9 +2139,9 @@ }, "node_modules/fsevents/node_modules/object-assign": { "version": "4.1.1", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2153,9 +2149,9 @@ }, "node_modules/fsevents/node_modules/once": { "version": "1.4.0", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "wrappy": "1" @@ -2163,9 +2159,9 @@ }, "node_modules/fsevents/node_modules/os-homedir": { "version": "1.0.2", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2173,9 +2169,9 @@ }, "node_modules/fsevents/node_modules/os-tmpdir": { "version": "1.0.2", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2183,9 +2179,9 @@ }, "node_modules/fsevents/node_modules/osenv": { "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "os-homedir": "^1.0.0", @@ -2194,9 +2190,9 @@ }, "node_modules/fsevents/node_modules/path-is-absolute": { "version": "1.0.1", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2204,16 +2200,16 @@ }, "node_modules/fsevents/node_modules/process-nextick-args": { "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/rc": { "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -2227,16 +2223,16 @@ }, "node_modules/fsevents/node_modules/rc/node_modules/minimist": { "version": "1.2.0", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/readable-stream": { "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2250,9 +2246,9 @@ }, "node_modules/fsevents/node_modules/rimraf": { "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -2263,30 +2259,30 @@ }, "node_modules/fsevents/node_modules/safe-buffer": { "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/safer-buffer": { "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/sax": { "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/semver": { "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -2294,23 +2290,23 @@ }, "node_modules/fsevents/node_modules/set-blocking": { "version": "2.0.0", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/signal-exit": { "version": "3.0.2", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/string_decoder": { "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -2318,9 +2314,9 @@ }, "node_modules/fsevents/node_modules/string-width": { "version": "1.0.2", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "code-point-at": "^1.0.0", @@ -2333,9 +2329,9 @@ }, "node_modules/fsevents/node_modules/strip-ansi": { "version": "3.0.1", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -2346,9 +2342,9 @@ }, "node_modules/fsevents/node_modules/strip-json-comments": { "version": "2.0.1", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2356,9 +2352,9 @@ }, "node_modules/fsevents/node_modules/tar": { "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -2375,16 +2371,16 @@ }, "node_modules/fsevents/node_modules/util-deprecate": { "version": "1.0.2", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/wide-align": { "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "string-width": "^1.0.2 || 2" @@ -2392,16 +2388,16 @@ }, "node_modules/fsevents/node_modules/wrappy": { "version": "1.0.2", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/yallist": { "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/function-bind": { diff --git a/packages/bitcore-lib-ltc/package-lock.json b/packages/bitcore-lib-ltc/package-lock.json index 01cd9f0d4c3..b3e2293929c 100644 --- a/packages/bitcore-lib-ltc/package-lock.json +++ b/packages/bitcore-lib-ltc/package-lock.json @@ -1715,16 +1715,16 @@ }, "node_modules/fsevents/node_modules/abbrev": { "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ansi-regex": { "version": "2.1.1", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1732,16 +1732,16 @@ }, "node_modules/fsevents/node_modules/aproba": { "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/are-we-there-yet": { "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "delegates": "^1.0.0", @@ -1750,16 +1750,16 @@ }, "node_modules/fsevents/node_modules/balanced-match": { "version": "1.0.0", - "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/brace-expansion": { "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -1768,16 +1768,16 @@ }, "node_modules/fsevents/node_modules/chownr": { "version": "1.1.3", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/code-point-at": { "version": "1.1.0", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1785,31 +1785,30 @@ }, "node_modules/fsevents/node_modules/concat-map": { "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/console-control-strings": { "version": "1.1.0", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/core-util-is": { "version": "1.0.2", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/debug": { "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -1817,9 +1816,9 @@ }, "node_modules/fsevents/node_modules/deep-extend": { "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -1827,16 +1826,16 @@ }, "node_modules/fsevents/node_modules/delegates": { "version": "1.0.0", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/detect-libc": { "version": "1.0.3", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, "inBundle": true, + "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -1847,9 +1846,9 @@ }, "node_modules/fsevents/node_modules/fs-minipass": { "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minipass": "^2.6.0" @@ -1857,16 +1856,16 @@ }, "node_modules/fsevents/node_modules/fs.realpath": { "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/gauge": { "version": "2.7.4", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "aproba": "^1.0.3", @@ -1881,9 +1880,9 @@ }, "node_modules/fsevents/node_modules/glob": { "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -1902,16 +1901,16 @@ }, "node_modules/fsevents/node_modules/has-unicode": { "version": "2.0.1", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/iconv-lite": { "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -1922,9 +1921,9 @@ }, "node_modules/fsevents/node_modules/ignore-walk": { "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minimatch": "^3.0.4" @@ -1932,9 +1931,9 @@ }, "node_modules/fsevents/node_modules/inflight": { "version": "1.0.6", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "once": "^1.3.0", @@ -1943,17 +1942,16 @@ }, "node_modules/fsevents/node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ini": { "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "engines": { "node": "*" @@ -1961,9 +1959,9 @@ }, "node_modules/fsevents/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -1974,16 +1972,16 @@ }, "node_modules/fsevents/node_modules/isarray": { "version": "1.0.0", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minimatch": { "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1994,16 +1992,16 @@ }, "node_modules/fsevents/node_modules/minimist": { "version": "0.0.8", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minipass": { "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "safe-buffer": "^5.1.2", @@ -2012,9 +2010,9 @@ }, "node_modules/fsevents/node_modules/minizlib": { "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minipass": "^2.9.0" @@ -2022,10 +2020,9 @@ }, "node_modules/fsevents/node_modules/mkdirp": { "version": "0.5.1", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "0.0.8" @@ -2036,16 +2033,16 @@ }, "node_modules/fsevents/node_modules/ms": { "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/needle": { "version": "2.4.0", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -2061,10 +2058,9 @@ }, "node_modules/fsevents/node_modules/node-pre-gyp": { "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", "dev": true, "inBundle": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "detect-libc": "^1.0.2", @@ -2084,9 +2080,9 @@ }, "node_modules/fsevents/node_modules/nopt": { "version": "4.0.1", - "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "abbrev": "1", @@ -2098,9 +2094,9 @@ }, "node_modules/fsevents/node_modules/npm-bundled": { "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" @@ -2108,16 +2104,16 @@ }, "node_modules/fsevents/node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/npm-packlist": { "version": "1.4.7", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "ignore-walk": "^3.0.1", @@ -2126,9 +2122,9 @@ }, "node_modules/fsevents/node_modules/npmlog": { "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", @@ -2139,9 +2135,9 @@ }, "node_modules/fsevents/node_modules/number-is-nan": { "version": "1.0.1", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2149,9 +2145,9 @@ }, "node_modules/fsevents/node_modules/object-assign": { "version": "4.1.1", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2159,9 +2155,9 @@ }, "node_modules/fsevents/node_modules/once": { "version": "1.4.0", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "wrappy": "1" @@ -2169,9 +2165,9 @@ }, "node_modules/fsevents/node_modules/os-homedir": { "version": "1.0.2", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2179,9 +2175,9 @@ }, "node_modules/fsevents/node_modules/os-tmpdir": { "version": "1.0.2", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2189,9 +2185,9 @@ }, "node_modules/fsevents/node_modules/osenv": { "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "os-homedir": "^1.0.0", @@ -2200,9 +2196,9 @@ }, "node_modules/fsevents/node_modules/path-is-absolute": { "version": "1.0.1", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2210,16 +2206,16 @@ }, "node_modules/fsevents/node_modules/process-nextick-args": { "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/rc": { "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -2233,16 +2229,16 @@ }, "node_modules/fsevents/node_modules/rc/node_modules/minimist": { "version": "1.2.0", - "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/readable-stream": { "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2256,9 +2252,9 @@ }, "node_modules/fsevents/node_modules/rimraf": { "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -2269,30 +2265,30 @@ }, "node_modules/fsevents/node_modules/safe-buffer": { "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/safer-buffer": { "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/sax": { "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/semver": { "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -2300,23 +2296,23 @@ }, "node_modules/fsevents/node_modules/set-blocking": { "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/signal-exit": { "version": "3.0.2", - "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/string_decoder": { "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -2324,9 +2320,9 @@ }, "node_modules/fsevents/node_modules/string-width": { "version": "1.0.2", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "code-point-at": "^1.0.0", @@ -2339,9 +2335,9 @@ }, "node_modules/fsevents/node_modules/strip-ansi": { "version": "3.0.1", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -2352,9 +2348,9 @@ }, "node_modules/fsevents/node_modules/strip-json-comments": { "version": "2.0.1", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2362,9 +2358,9 @@ }, "node_modules/fsevents/node_modules/tar": { "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -2381,16 +2377,16 @@ }, "node_modules/fsevents/node_modules/util-deprecate": { "version": "1.0.2", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/wide-align": { "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "string-width": "^1.0.2 || 2" @@ -2398,16 +2394,16 @@ }, "node_modules/fsevents/node_modules/wrappy": { "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/yallist": { "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/function-bind": { diff --git a/packages/bitcore-lib/package-lock.json b/packages/bitcore-lib/package-lock.json index c9c514e7a2f..d329ed17ae1 100644 --- a/packages/bitcore-lib/package-lock.json +++ b/packages/bitcore-lib/package-lock.json @@ -1714,16 +1714,16 @@ }, "node_modules/fsevents/node_modules/abbrev": { "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ansi-regex": { "version": "2.1.1", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1731,16 +1731,16 @@ }, "node_modules/fsevents/node_modules/aproba": { "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/are-we-there-yet": { "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "delegates": "^1.0.0", @@ -1749,16 +1749,16 @@ }, "node_modules/fsevents/node_modules/balanced-match": { "version": "1.0.0", - "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/brace-expansion": { "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -1767,16 +1767,16 @@ }, "node_modules/fsevents/node_modules/chownr": { "version": "1.1.3", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/code-point-at": { "version": "1.1.0", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1784,31 +1784,30 @@ }, "node_modules/fsevents/node_modules/concat-map": { "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/console-control-strings": { "version": "1.1.0", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/core-util-is": { "version": "1.0.2", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/debug": { "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -1816,9 +1815,9 @@ }, "node_modules/fsevents/node_modules/deep-extend": { "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -1826,16 +1825,16 @@ }, "node_modules/fsevents/node_modules/delegates": { "version": "1.0.0", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/detect-libc": { "version": "1.0.3", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, "inBundle": true, + "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -1846,9 +1845,9 @@ }, "node_modules/fsevents/node_modules/fs-minipass": { "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minipass": "^2.6.0" @@ -1856,16 +1855,16 @@ }, "node_modules/fsevents/node_modules/fs.realpath": { "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/gauge": { "version": "2.7.4", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "aproba": "^1.0.3", @@ -1880,9 +1879,9 @@ }, "node_modules/fsevents/node_modules/glob": { "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -1901,16 +1900,16 @@ }, "node_modules/fsevents/node_modules/has-unicode": { "version": "2.0.1", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/iconv-lite": { "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -1921,9 +1920,9 @@ }, "node_modules/fsevents/node_modules/ignore-walk": { "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minimatch": "^3.0.4" @@ -1931,9 +1930,9 @@ }, "node_modules/fsevents/node_modules/inflight": { "version": "1.0.6", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "once": "^1.3.0", @@ -1942,17 +1941,16 @@ }, "node_modules/fsevents/node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ini": { "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "engines": { "node": "*" @@ -1960,9 +1958,9 @@ }, "node_modules/fsevents/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -1973,16 +1971,16 @@ }, "node_modules/fsevents/node_modules/isarray": { "version": "1.0.0", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minimatch": { "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1993,16 +1991,16 @@ }, "node_modules/fsevents/node_modules/minimist": { "version": "0.0.8", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minipass": { "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "safe-buffer": "^5.1.2", @@ -2011,9 +2009,9 @@ }, "node_modules/fsevents/node_modules/minizlib": { "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minipass": "^2.9.0" @@ -2021,10 +2019,9 @@ }, "node_modules/fsevents/node_modules/mkdirp": { "version": "0.5.1", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "0.0.8" @@ -2035,16 +2032,16 @@ }, "node_modules/fsevents/node_modules/ms": { "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/needle": { "version": "2.4.0", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -2060,10 +2057,9 @@ }, "node_modules/fsevents/node_modules/node-pre-gyp": { "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", "dev": true, "inBundle": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "detect-libc": "^1.0.2", @@ -2083,9 +2079,9 @@ }, "node_modules/fsevents/node_modules/nopt": { "version": "4.0.1", - "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "abbrev": "1", @@ -2097,9 +2093,9 @@ }, "node_modules/fsevents/node_modules/npm-bundled": { "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" @@ -2107,16 +2103,16 @@ }, "node_modules/fsevents/node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/npm-packlist": { "version": "1.4.7", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "ignore-walk": "^3.0.1", @@ -2125,9 +2121,9 @@ }, "node_modules/fsevents/node_modules/npmlog": { "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", @@ -2138,9 +2134,9 @@ }, "node_modules/fsevents/node_modules/number-is-nan": { "version": "1.0.1", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2148,9 +2144,9 @@ }, "node_modules/fsevents/node_modules/object-assign": { "version": "4.1.1", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2158,9 +2154,9 @@ }, "node_modules/fsevents/node_modules/once": { "version": "1.4.0", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "wrappy": "1" @@ -2168,9 +2164,9 @@ }, "node_modules/fsevents/node_modules/os-homedir": { "version": "1.0.2", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2178,9 +2174,9 @@ }, "node_modules/fsevents/node_modules/os-tmpdir": { "version": "1.0.2", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2188,9 +2184,9 @@ }, "node_modules/fsevents/node_modules/osenv": { "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "os-homedir": "^1.0.0", @@ -2199,9 +2195,9 @@ }, "node_modules/fsevents/node_modules/path-is-absolute": { "version": "1.0.1", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2209,16 +2205,16 @@ }, "node_modules/fsevents/node_modules/process-nextick-args": { "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/rc": { "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -2232,16 +2228,16 @@ }, "node_modules/fsevents/node_modules/rc/node_modules/minimist": { "version": "1.2.0", - "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/readable-stream": { "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2255,9 +2251,9 @@ }, "node_modules/fsevents/node_modules/rimraf": { "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -2268,30 +2264,30 @@ }, "node_modules/fsevents/node_modules/safe-buffer": { "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/safer-buffer": { "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/sax": { "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/semver": { "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -2299,23 +2295,23 @@ }, "node_modules/fsevents/node_modules/set-blocking": { "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/signal-exit": { "version": "3.0.2", - "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/string_decoder": { "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -2323,9 +2319,9 @@ }, "node_modules/fsevents/node_modules/string-width": { "version": "1.0.2", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "code-point-at": "^1.0.0", @@ -2338,9 +2334,9 @@ }, "node_modules/fsevents/node_modules/strip-ansi": { "version": "3.0.1", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -2351,9 +2347,9 @@ }, "node_modules/fsevents/node_modules/strip-json-comments": { "version": "2.0.1", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2361,9 +2357,9 @@ }, "node_modules/fsevents/node_modules/tar": { "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -2380,16 +2376,16 @@ }, "node_modules/fsevents/node_modules/util-deprecate": { "version": "1.0.2", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/wide-align": { "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "string-width": "^1.0.2 || 2" @@ -2397,16 +2393,16 @@ }, "node_modules/fsevents/node_modules/wrappy": { "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/yallist": { "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/function-bind": { diff --git a/packages/bitcore-mnemonic/package-lock.json b/packages/bitcore-mnemonic/package-lock.json index 88f2c46cc83..214aa7158f2 100644 --- a/packages/bitcore-mnemonic/package-lock.json +++ b/packages/bitcore-mnemonic/package-lock.json @@ -1490,6 +1490,7 @@ "node-pre-gyp" ], "dev": true, + "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -1503,6 +1504,632 @@ "node": ">=4.0" } }, + "node_modules/fsevents/node_modules/abbrev": { + "version": "1.1.1", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/ansi-regex": { + "version": "2.1.1", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/aproba": { + "version": "1.2.0", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/are-we-there-yet": { + "version": "1.1.5", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/fsevents/node_modules/balanced-match": { + "version": "1.0.0", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/brace-expansion": { + "version": "1.1.11", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fsevents/node_modules/chownr": { + "version": "1.1.3", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/code-point-at": { + "version": "1.1.0", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/concat-map": { + "version": "0.0.1", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/console-control-strings": { + "version": "1.1.0", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/core-util-is": { + "version": "1.0.2", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/debug": { + "version": "3.2.6", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/fsevents/node_modules/deep-extend": { + "version": "0.6.0", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fsevents/node_modules/delegates": { + "version": "1.0.0", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/detect-libc": { + "version": "1.0.3", + "extraneous": true, + "inBundle": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/fsevents/node_modules/fs-minipass": { + "version": "1.2.7", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fsevents/node_modules/fs.realpath": { + "version": "1.0.0", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/gauge": { + "version": "2.7.4", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/fsevents/node_modules/glob": { + "version": "7.1.6", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents/node_modules/has-unicode": { + "version": "2.0.1", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/iconv-lite": { + "version": "0.4.24", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/ignore-walk": { + "version": "3.0.3", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/fsevents/node_modules/inflight": { + "version": "1.0.6", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/inherits": { + "version": "2.0.4", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/ini": { + "version": "1.3.5", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/isarray": { + "version": "1.0.0", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/minimatch": { + "version": "3.0.4", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/minimist": { + "version": "0.0.8", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/minipass": { + "version": "2.9.0", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/fsevents/node_modules/minizlib": { + "version": "1.3.3", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/fsevents/node_modules/mkdirp": { + "version": "0.5.1", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fsevents/node_modules/ms": { + "version": "2.1.2", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/needle": { + "version": "2.4.0", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/fsevents/node_modules/node-pre-gyp": { + "version": "0.14.0", + "extraneous": true, + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/fsevents/node_modules/nopt": { + "version": "4.0.1", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/fsevents/node_modules/npm-bundled": { + "version": "1.1.1", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/fsevents/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/npm-packlist": { + "version": "1.4.7", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "node_modules/fsevents/node_modules/npmlog": { + "version": "4.1.2", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/fsevents/node_modules/number-is-nan": { + "version": "1.0.1", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/object-assign": { + "version": "4.1.1", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/once": { + "version": "1.4.0", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/os-homedir": { + "version": "1.0.2", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/os-tmpdir": { + "version": "1.0.2", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/osenv": { + "version": "0.1.5", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/fsevents/node_modules/path-is-absolute": { + "version": "1.0.1", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/process-nextick-args": { + "version": "2.0.1", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/rc": { + "version": "1.2.8", + "extraneous": true, + "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/fsevents/node_modules/rc/node_modules/minimist": { + "version": "1.2.0", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/readable-stream": { + "version": "2.3.6", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fsevents/node_modules/rimraf": { + "version": "2.7.1", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/fsevents/node_modules/safe-buffer": { + "version": "5.1.2", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/safer-buffer": { + "version": "2.1.2", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/sax": { + "version": "1.2.4", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/semver": { + "version": "5.7.1", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/fsevents/node_modules/set-blocking": { + "version": "2.0.0", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/signal-exit": { + "version": "3.0.2", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/string_decoder": { + "version": "1.1.1", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fsevents/node_modules/string-width": { + "version": "1.0.2", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-ansi": { + "version": "3.0.1", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-json-comments": { + "version": "2.0.1", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/tar": { + "version": "4.4.13", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/fsevents/node_modules/util-deprecate": { + "version": "1.0.2", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/fsevents/node_modules/wide-align": { + "version": "1.1.3", + "extraneous": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/fsevents/node_modules/wrappy": { + "version": "1.0.2", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/fsevents/node_modules/yallist": { + "version": "3.1.1", + "extraneous": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4942,6 +5569,485 @@ "requires": { "bindings": "^1.5.0", "nan": "^2.12.1" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "extraneous": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "extraneous": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "extraneous": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "extraneous": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "extraneous": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "extraneous": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "extraneous": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "extraneous": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "extraneous": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "extraneous": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "extraneous": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "extraneous": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "extraneous": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "extraneous": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "extraneous": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "extraneous": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "extraneous": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "extraneous": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "extraneous": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "extraneous": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "extraneous": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "extraneous": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "extraneous": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "extraneous": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "extraneous": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "extraneous": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "extraneous": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "extraneous": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "extraneous": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "extraneous": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "extraneous": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "extraneous": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "extraneous": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "extraneous": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "extraneous": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "extraneous": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "extraneous": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "extraneous": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "extraneous": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "extraneous": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "extraneous": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "extraneous": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "extraneous": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "extraneous": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "extraneous": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "extraneous": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "extraneous": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "extraneous": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "extraneous": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "extraneous": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "extraneous": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "extraneous": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "extraneous": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "extraneous": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "extraneous": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "extraneous": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "extraneous": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "extraneous": true + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "extraneous": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "extraneous": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "extraneous": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "extraneous": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "extraneous": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "extraneous": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "extraneous": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "extraneous": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "extraneous": true + } } }, "function-bind": { diff --git a/packages/bitcore-p2p-cash/package-lock.json b/packages/bitcore-p2p-cash/package-lock.json index 032ab84779d..7c07c365679 100644 --- a/packages/bitcore-p2p-cash/package-lock.json +++ b/packages/bitcore-p2p-cash/package-lock.json @@ -1679,16 +1679,16 @@ }, "node_modules/fsevents/node_modules/abbrev": { "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ansi-regex": { "version": "2.1.1", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1696,16 +1696,16 @@ }, "node_modules/fsevents/node_modules/aproba": { "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/are-we-there-yet": { "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "delegates": "^1.0.0", @@ -1714,16 +1714,16 @@ }, "node_modules/fsevents/node_modules/balanced-match": { "version": "1.0.0", - "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/brace-expansion": { "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -1732,16 +1732,16 @@ }, "node_modules/fsevents/node_modules/chownr": { "version": "1.1.3", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/code-point-at": { "version": "1.1.0", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1749,31 +1749,30 @@ }, "node_modules/fsevents/node_modules/concat-map": { "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/console-control-strings": { "version": "1.1.0", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/core-util-is": { "version": "1.0.2", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/debug": { "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -1781,9 +1780,9 @@ }, "node_modules/fsevents/node_modules/deep-extend": { "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -1791,16 +1790,16 @@ }, "node_modules/fsevents/node_modules/delegates": { "version": "1.0.0", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/detect-libc": { "version": "1.0.3", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, "inBundle": true, + "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -1811,9 +1810,9 @@ }, "node_modules/fsevents/node_modules/fs-minipass": { "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minipass": "^2.6.0" @@ -1821,16 +1820,16 @@ }, "node_modules/fsevents/node_modules/fs.realpath": { "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/gauge": { "version": "2.7.4", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "aproba": "^1.0.3", @@ -1845,9 +1844,9 @@ }, "node_modules/fsevents/node_modules/glob": { "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -1866,16 +1865,16 @@ }, "node_modules/fsevents/node_modules/has-unicode": { "version": "2.0.1", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/iconv-lite": { "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -1886,9 +1885,9 @@ }, "node_modules/fsevents/node_modules/ignore-walk": { "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minimatch": "^3.0.4" @@ -1896,9 +1895,9 @@ }, "node_modules/fsevents/node_modules/inflight": { "version": "1.0.6", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "once": "^1.3.0", @@ -1907,17 +1906,16 @@ }, "node_modules/fsevents/node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ini": { "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "engines": { "node": "*" @@ -1925,9 +1923,9 @@ }, "node_modules/fsevents/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -1938,16 +1936,16 @@ }, "node_modules/fsevents/node_modules/isarray": { "version": "1.0.0", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minimatch": { "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1958,16 +1956,16 @@ }, "node_modules/fsevents/node_modules/minimist": { "version": "0.0.8", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minipass": { "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "safe-buffer": "^5.1.2", @@ -1976,9 +1974,9 @@ }, "node_modules/fsevents/node_modules/minizlib": { "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minipass": "^2.9.0" @@ -1986,10 +1984,9 @@ }, "node_modules/fsevents/node_modules/mkdirp": { "version": "0.5.1", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "0.0.8" @@ -2000,16 +1997,16 @@ }, "node_modules/fsevents/node_modules/ms": { "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/needle": { "version": "2.4.0", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -2025,10 +2022,9 @@ }, "node_modules/fsevents/node_modules/node-pre-gyp": { "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", "dev": true, "inBundle": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "detect-libc": "^1.0.2", @@ -2048,9 +2044,9 @@ }, "node_modules/fsevents/node_modules/nopt": { "version": "4.0.1", - "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "abbrev": "1", @@ -2062,9 +2058,9 @@ }, "node_modules/fsevents/node_modules/npm-bundled": { "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" @@ -2072,16 +2068,16 @@ }, "node_modules/fsevents/node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/npm-packlist": { "version": "1.4.7", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "ignore-walk": "^3.0.1", @@ -2090,9 +2086,9 @@ }, "node_modules/fsevents/node_modules/npmlog": { "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", @@ -2103,9 +2099,9 @@ }, "node_modules/fsevents/node_modules/number-is-nan": { "version": "1.0.1", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2113,9 +2109,9 @@ }, "node_modules/fsevents/node_modules/object-assign": { "version": "4.1.1", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2123,9 +2119,9 @@ }, "node_modules/fsevents/node_modules/once": { "version": "1.4.0", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "wrappy": "1" @@ -2133,9 +2129,9 @@ }, "node_modules/fsevents/node_modules/os-homedir": { "version": "1.0.2", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2143,9 +2139,9 @@ }, "node_modules/fsevents/node_modules/os-tmpdir": { "version": "1.0.2", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2153,9 +2149,9 @@ }, "node_modules/fsevents/node_modules/osenv": { "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "os-homedir": "^1.0.0", @@ -2164,9 +2160,9 @@ }, "node_modules/fsevents/node_modules/path-is-absolute": { "version": "1.0.1", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2174,16 +2170,16 @@ }, "node_modules/fsevents/node_modules/process-nextick-args": { "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/rc": { "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -2197,16 +2193,16 @@ }, "node_modules/fsevents/node_modules/rc/node_modules/minimist": { "version": "1.2.0", - "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/readable-stream": { "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2220,9 +2216,9 @@ }, "node_modules/fsevents/node_modules/rimraf": { "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -2233,30 +2229,30 @@ }, "node_modules/fsevents/node_modules/safe-buffer": { "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/safer-buffer": { "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/sax": { "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/semver": { "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -2264,23 +2260,23 @@ }, "node_modules/fsevents/node_modules/set-blocking": { "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/signal-exit": { "version": "3.0.2", - "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/string_decoder": { "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -2288,9 +2284,9 @@ }, "node_modules/fsevents/node_modules/string-width": { "version": "1.0.2", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "code-point-at": "^1.0.0", @@ -2303,9 +2299,9 @@ }, "node_modules/fsevents/node_modules/strip-ansi": { "version": "3.0.1", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -2316,9 +2312,9 @@ }, "node_modules/fsevents/node_modules/strip-json-comments": { "version": "2.0.1", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2326,9 +2322,9 @@ }, "node_modules/fsevents/node_modules/tar": { "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -2345,16 +2341,16 @@ }, "node_modules/fsevents/node_modules/util-deprecate": { "version": "1.0.2", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/wide-align": { "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "string-width": "^1.0.2 || 2" @@ -2362,16 +2358,16 @@ }, "node_modules/fsevents/node_modules/wrappy": { "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/yallist": { "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/function-bind": { diff --git a/packages/bitcore-p2p/package-lock.json b/packages/bitcore-p2p/package-lock.json index 5a6de98ebe1..779eb06973e 100644 --- a/packages/bitcore-p2p/package-lock.json +++ b/packages/bitcore-p2p/package-lock.json @@ -1679,16 +1679,16 @@ }, "node_modules/fsevents/node_modules/abbrev": { "version": "1.1.1", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ansi-regex": { "version": "2.1.1", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1696,16 +1696,16 @@ }, "node_modules/fsevents/node_modules/aproba": { "version": "1.2.0", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/are-we-there-yet": { "version": "1.1.5", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "delegates": "^1.0.0", @@ -1714,16 +1714,16 @@ }, "node_modules/fsevents/node_modules/balanced-match": { "version": "1.0.0", - "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/brace-expansion": { "version": "1.1.11", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "balanced-match": "^1.0.0", @@ -1732,16 +1732,16 @@ }, "node_modules/fsevents/node_modules/chownr": { "version": "1.1.3", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/code-point-at": { "version": "1.1.0", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -1749,31 +1749,30 @@ }, "node_modules/fsevents/node_modules/concat-map": { "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/console-control-strings": { "version": "1.1.0", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/core-util-is": { "version": "1.0.2", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/debug": { "version": "3.2.6", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -1781,9 +1780,9 @@ }, "node_modules/fsevents/node_modules/deep-extend": { "version": "0.6.0", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4.0.0" @@ -1791,16 +1790,16 @@ }, "node_modules/fsevents/node_modules/delegates": { "version": "1.0.0", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/detect-libc": { "version": "1.0.3", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, "inBundle": true, + "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -1811,9 +1810,9 @@ }, "node_modules/fsevents/node_modules/fs-minipass": { "version": "1.2.7", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minipass": "^2.6.0" @@ -1821,16 +1820,16 @@ }, "node_modules/fsevents/node_modules/fs.realpath": { "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/gauge": { "version": "2.7.4", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "aproba": "^1.0.3", @@ -1845,9 +1844,9 @@ }, "node_modules/fsevents/node_modules/glob": { "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -1866,16 +1865,16 @@ }, "node_modules/fsevents/node_modules/has-unicode": { "version": "2.0.1", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/iconv-lite": { "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -1886,9 +1885,9 @@ }, "node_modules/fsevents/node_modules/ignore-walk": { "version": "3.0.3", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "minimatch": "^3.0.4" @@ -1896,9 +1895,9 @@ }, "node_modules/fsevents/node_modules/inflight": { "version": "1.0.6", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "once": "^1.3.0", @@ -1907,17 +1906,16 @@ }, "node_modules/fsevents/node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/ini": { "version": "1.3.5", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "engines": { "node": "*" @@ -1925,9 +1923,9 @@ }, "node_modules/fsevents/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -1938,16 +1936,16 @@ }, "node_modules/fsevents/node_modules/isarray": { "version": "1.0.0", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minimatch": { "version": "3.0.4", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1958,16 +1956,16 @@ }, "node_modules/fsevents/node_modules/minimist": { "version": "0.0.8", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/minipass": { "version": "2.9.0", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "safe-buffer": "^5.1.2", @@ -1976,9 +1974,9 @@ }, "node_modules/fsevents/node_modules/minizlib": { "version": "1.3.3", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minipass": "^2.9.0" @@ -1986,10 +1984,9 @@ }, "node_modules/fsevents/node_modules/mkdirp": { "version": "0.5.1", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "minimist": "0.0.8" @@ -2000,16 +1997,16 @@ }, "node_modules/fsevents/node_modules/ms": { "version": "2.1.2", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/needle": { "version": "2.4.0", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -2025,10 +2022,9 @@ }, "node_modules/fsevents/node_modules/node-pre-gyp": { "version": "0.14.0", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", "dev": true, "inBundle": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "detect-libc": "^1.0.2", @@ -2048,9 +2044,9 @@ }, "node_modules/fsevents/node_modules/nopt": { "version": "4.0.1", - "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "abbrev": "1", @@ -2062,9 +2058,9 @@ }, "node_modules/fsevents/node_modules/npm-bundled": { "version": "1.1.1", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" @@ -2072,16 +2068,16 @@ }, "node_modules/fsevents/node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/npm-packlist": { "version": "1.4.7", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "ignore-walk": "^3.0.1", @@ -2090,9 +2086,9 @@ }, "node_modules/fsevents/node_modules/npmlog": { "version": "4.1.2", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", @@ -2103,9 +2099,9 @@ }, "node_modules/fsevents/node_modules/number-is-nan": { "version": "1.0.1", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2113,9 +2109,9 @@ }, "node_modules/fsevents/node_modules/object-assign": { "version": "4.1.1", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2123,9 +2119,9 @@ }, "node_modules/fsevents/node_modules/once": { "version": "1.4.0", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "wrappy": "1" @@ -2133,9 +2129,9 @@ }, "node_modules/fsevents/node_modules/os-homedir": { "version": "1.0.2", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2143,9 +2139,9 @@ }, "node_modules/fsevents/node_modules/os-tmpdir": { "version": "1.0.2", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2153,9 +2149,9 @@ }, "node_modules/fsevents/node_modules/osenv": { "version": "0.1.5", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "os-homedir": "^1.0.0", @@ -2164,9 +2160,9 @@ }, "node_modules/fsevents/node_modules/path-is-absolute": { "version": "1.0.1", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2174,16 +2170,16 @@ }, "node_modules/fsevents/node_modules/process-nextick-args": { "version": "2.0.1", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/rc": { "version": "1.2.8", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { "deep-extend": "^0.6.0", @@ -2197,16 +2193,16 @@ }, "node_modules/fsevents/node_modules/rc/node_modules/minimist": { "version": "1.2.0", - "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/readable-stream": { "version": "2.3.6", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2220,9 +2216,9 @@ }, "node_modules/fsevents/node_modules/rimraf": { "version": "2.7.1", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -2233,30 +2229,30 @@ }, "node_modules/fsevents/node_modules/safe-buffer": { "version": "5.1.2", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/safer-buffer": { "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/sax": { "version": "1.2.4", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/semver": { "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -2264,23 +2260,23 @@ }, "node_modules/fsevents/node_modules/set-blocking": { "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/signal-exit": { "version": "3.0.2", - "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/string_decoder": { "version": "1.1.1", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -2288,9 +2284,9 @@ }, "node_modules/fsevents/node_modules/string-width": { "version": "1.0.2", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "code-point-at": "^1.0.0", @@ -2303,9 +2299,9 @@ }, "node_modules/fsevents/node_modules/strip-ansi": { "version": "3.0.1", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -2316,9 +2312,9 @@ }, "node_modules/fsevents/node_modules/strip-json-comments": { "version": "2.0.1", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -2326,9 +2322,9 @@ }, "node_modules/fsevents/node_modules/tar": { "version": "4.4.13", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -2345,16 +2341,16 @@ }, "node_modules/fsevents/node_modules/util-deprecate": { "version": "1.0.2", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "inBundle": true, + "license": "MIT", "optional": true }, "node_modules/fsevents/node_modules/wide-align": { "version": "1.1.3", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true, "dependencies": { "string-width": "^1.0.2 || 2" @@ -2362,16 +2358,16 @@ }, "node_modules/fsevents/node_modules/wrappy": { "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/fsevents/node_modules/yallist": { "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "inBundle": true, + "license": "ISC", "optional": true }, "node_modules/function-bind": { diff --git a/packages/crypto-rpc/package-lock.json b/packages/crypto-rpc/package-lock.json index f102ed7460e..86eb3ee66d4 100644 --- a/packages/crypto-rpc/package-lock.json +++ b/packages/crypto-rpc/package-lock.json @@ -9,7 +9,6 @@ "version": "11.10.4", "license": "MIT", "dependencies": { - "@bitpay-labs/crypto-wallet-core": "^11.10.4", "@solana-program/address-lookup-table": "0.7.0", "bitcoind-rpc": "0.9.1", "commander": "2.8.1", @@ -33,7 +32,9 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "license": "MIT" + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@bcoe/v8-coverage": { "version": "1.0.2", @@ -45,1385 +46,468 @@ "node": ">=18" } }, - "node_modules/@bitpay-labs/bitcore-lib": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/@bitpay-labs/bitcore-lib/-/bitcore-lib-11.9.0.tgz", - "integrity": "sha512-1wCjL0d4JHDs/BhtGCIO3x3m1J70rziOylUItWA7jGEOchgr1Wr3fh/neFHpXM6n2YESrPY2VXPKFvDCysJXiw==", - "license": "MIT", - "dependencies": { - "bech32": "=2.0.0", - "bn.js": "=4.11.8", - "bs58": "^4.0.1", - "buffer-compare": "=1.1.1", - "elliptic": "^6.5.3", - "inherits": "=2.0.1", - "lodash": "^4.17.20" + "node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@bitpay-labs/bitcore-lib-cash": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/@bitpay-labs/bitcore-lib-cash/-/bitcore-lib-cash-11.9.0.tgz", - "integrity": "sha512-ksVDJyyMZr+94KsrWp5D7O342DqHdQKGQxN6M3eQTyq1svJnYbQmQbNcEKvbM9Bql9BAbXeBnma2KZeR2DSjnQ==", - "license": "MIT", + "node_modules/@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "bn.js": "=4.11.8", - "bs58": "^4.0.1", - "buffer-compare": "=1.1.1", - "elliptic": "^6.5.3", - "inherits": "=2.0.1", - "lodash": "^4.17.20" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@bitpay-labs/bitcore-lib-cash/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@bitpay-labs/bitcore-lib-cash/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "license": "MIT" - }, - "node_modules/@bitpay-labs/bitcore-lib-cash/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@bitpay-labs/bitcore-lib-cash/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "license": "ISC" - }, - "node_modules/@bitpay-labs/bitcore-lib-doge": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/@bitpay-labs/bitcore-lib-doge/-/bitcore-lib-doge-11.8.1.tgz", - "integrity": "sha512-U0P+RDPuxO3Qu9rZ0AMuJE+4NG51xPviADxLq3v9rEt0KkEYb+mMlb8qQoM1FCBXqsH1l2DsbwoVAa+aKTfV1A==", + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, "license": "MIT", "dependencies": { - "bn.js": "=4.11.8", - "bs58": "^4.0.1", - "buffer-compare": "=1.1.1", - "elliptic": "^6.5.3", - "inherits": "=2.0.1", - "lodash": "^4.17.20", - "scryptsy": "2.1.0" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@bitpay-labs/bitcore-lib-doge/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@bitpay-labs/bitcore-lib-doge/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "license": "MIT" - }, - "node_modules/@bitpay-labs/bitcore-lib-doge/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "node_modules/@bitpay-labs/bitcore-lib-doge/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "license": "ISC" - }, - "node_modules/@bitpay-labs/bitcore-lib-ltc": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/@bitpay-labs/bitcore-lib-ltc/-/bitcore-lib-ltc-11.9.0.tgz", - "integrity": "sha512-aC0oZixFueKiaRVNwVAsK/ho3FsKuMPMZHJh1GcXLBWb/lpqsIoo531guFlMDn6CPUI3YMqvqDj2qLbuFTvFuA==", + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "bech32": "=2.0.0", - "bn.js": "=4.11.8", - "bs58": "^4.0.1", - "buffer-compare": "=1.1.1", - "elliptic": "^6.5.3", - "inherits": "=2.0.1", - "lodash": "^4.17.20", - "scryptsy": "2.1.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@bitpay-labs/bitcore-lib-ltc/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@bitpay-labs/bitcore-lib-ltc/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "license": "MIT" - }, - "node_modules/@bitpay-labs/bitcore-lib-ltc/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@bitpay-labs/bitcore-lib-ltc/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "license": "ISC" - }, - "node_modules/@bitpay-labs/bitcore-lib/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@bitpay-labs/bitcore-lib/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "license": "MIT" - }, - "node_modules/@bitpay-labs/bitcore-lib/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@bitpay-labs/bitcore-lib/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "license": "ISC" - }, - "node_modules/@bitpay-labs/crypto-wallet-core": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/@bitpay-labs/crypto-wallet-core/-/crypto-wallet-core-11.10.0.tgz", - "integrity": "sha512-3TSFkyFS6VknCFf8z79OOjQvKuOZhio+vcDcw59MVT8gVLx/0DAyZccXVDrZPw7bpfxGIGeWW+cEADUWjnheDw==", - "license": "MIT", - "dependencies": { - "@bitpay-labs/bitcore-lib": "^11.9.0", - "@bitpay-labs/bitcore-lib-cash": "^11.9.0", - "@bitpay-labs/bitcore-lib-doge": "^11.8.1", - "@bitpay-labs/bitcore-lib-ltc": "^11.9.0", - "@solana-program/compute-budget": "0.7.0", - "@solana-program/memo": "0.7.0", - "@solana-program/system": "0.7.0", - "@solana-program/token": "0.5.1", - "@solana/kit": "2.1.0", - "ed25519-hd-key": "^1.3.0", - "ethers": "6.13.5", - "info": "0.0.6-beta.0", - "ripple-binary-codec": "^1.10.0", - "web3": "4.16.0", - "xrpl": "2.13.0" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/accounts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/accounts/-/accounts-2.1.0.tgz", - "integrity": "sha512-1JOBiLFeIeHmGx7k1b23UWF9vM1HAh9GBMCzr5rBPrGSBs+QUgxBJ3+yrRg+UPEOSELubqo7qoOVFUKYsb1nXw==", + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/codecs-core": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/errors": "2.1.0", - "@solana/rpc-spec": "2.1.0", - "@solana/rpc-types": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/addresses": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/addresses/-/addresses-2.1.0.tgz", - "integrity": "sha512-IgiRuju2yLz14GnrysOPSNZbZQ8F+7jhx7FYZLrbKogf6NX4wy4ijLHxRsLFqP8o8aY69BZULkM9MwrSjsZi7A==", - "license": "MIT", - "dependencies": { - "@solana/assertions": "2.1.0", - "@solana/codecs-core": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/assertions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/assertions/-/assertions-2.1.0.tgz", - "integrity": "sha512-KCYmxFRsg897Ec7yGdpc0rniOlqGD3NpicmIjWIV87uiXX5uFco4t+01sKyFlhsv4T4OgHxngMsxkfQ3AUkFVg==", + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/codecs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.1.0.tgz", - "integrity": "sha512-C0TnfrpbTg7zoIFYfM65ofeL2AWEz80OsD6mjVdcTKpb1Uj7XuBuNLss3dMnatPQaL7RagD9VLA5/WfYayyteQ==", + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@solana/codecs-core": "2.1.0", - "@solana/codecs-data-structures": "2.1.0", - "@solana/codecs-numbers": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/options": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/codecs-core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.1.0.tgz", - "integrity": "sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw==", + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/codecs-data-structures": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.1.0.tgz", - "integrity": "sha512-oDF5ek54kirqJ09q8k/qEpobBiWOhd3CkkGOTyfjsmTF/IGIigNbdYIakxV3+vudBeaNBw08y0XdBYI4JL/nqA==", + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@solana/codecs-core": "2.1.0", - "@solana/codecs-numbers": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/codecs-numbers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.1.0.tgz", - "integrity": "sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag==", - "license": "MIT", - "dependencies": { - "@solana/codecs-core": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/codecs-strings": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.1.0.tgz", - "integrity": "sha512-O/eJFLzFrHomcCR1Y5QbIqoPo7iaJaWNnIeskB4mVhVjLyjlJS4WtBP2NBRzM9uJXaXyOxxKroqqO9zFsHOpvQ==", + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@solana/codecs-core": "2.1.0", - "@solana/codecs-numbers": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "fastestsmallesttextencoderdecoder": "^1.0.22", - "typescript": ">=5" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/errors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.1.0.tgz", - "integrity": "sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw==", + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "chalk": "^5.3.0", - "commander": "^13.1.0" - }, - "bin": { - "errors": "bin/cli.mjs" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/fast-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/fast-stable-stringify/-/fast-stable-stringify-2.1.0.tgz", - "integrity": "sha512-a8vR92qbe/VsvQ1BpN3PIEwnoHD2fTHEwCJh9GG58z3R15RIjk73gc0khjcdg4U1tZwTJqWkvk8SbDIgGdOgMA==", + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/functional": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/functional/-/functional-2.1.0.tgz", - "integrity": "sha512-RVij8Av4F2uUOFcEC8n9lgD72e9gQMritmGHhMh+G91Xops4I6Few+oQ++XgSTiL2t3g3Cs0QZ13onZ0FL45FQ==", + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/instructions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/instructions/-/instructions-2.1.0.tgz", - "integrity": "sha512-wfn6e7Rgm0Sw/Th1v/pXsKTvloZvAAQI7j1yc9WcIk9ngqH5p6LhqMMkrwYPB2oTk8+MMr7SZ4E+2eK2gL6ODA==", + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@solana/codecs-core": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/keys/-/keys-2.1.0.tgz", - "integrity": "sha512-esY1+dlZjB18hZML5p+YPec29wi3HH0SzKx7RiqF//dI2cJ6vHfq3F+7ArbNnF6R2YCLFtl7DzS/tkqR2Xkxeg==", - "license": "MIT", - "dependencies": { - "@solana/assertions": "2.1.0", - "@solana/codecs-core": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/kit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/kit/-/kit-2.1.0.tgz", - "integrity": "sha512-vqaHROLKp89xdIbaKVG6BQ44uMN9E6/rSTeltkvquD2qdTObssafGDbAKVFjwZhlNO+sdzHDCLekGabn5VAL6A==", - "license": "MIT", - "dependencies": { - "@solana/accounts": "2.1.0", - "@solana/addresses": "2.1.0", - "@solana/codecs": "2.1.0", - "@solana/errors": "2.1.0", - "@solana/functional": "2.1.0", - "@solana/instructions": "2.1.0", - "@solana/keys": "2.1.0", - "@solana/programs": "2.1.0", - "@solana/rpc": "2.1.0", - "@solana/rpc-parsed-types": "2.1.0", - "@solana/rpc-spec-types": "2.1.0", - "@solana/rpc-subscriptions": "2.1.0", - "@solana/rpc-types": "2.1.0", - "@solana/signers": "2.1.0", - "@solana/sysvars": "2.1.0", - "@solana/transaction-confirmation": "2.1.0", - "@solana/transaction-messages": "2.1.0", - "@solana/transactions": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/options": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.1.0.tgz", - "integrity": "sha512-T/vJCr8qnwK6HxriOPXCrx31IpA9ZYecxuOzQ3G74kIayED4spmpXp6PLtRYR/fo2LZ6UcgHN0qSgONnvwEweg==", - "license": "MIT", - "dependencies": { - "@solana/codecs-core": "2.1.0", - "@solana/codecs-data-structures": "2.1.0", - "@solana/codecs-numbers": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/programs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/programs/-/programs-2.1.0.tgz", - "integrity": "sha512-9Y30/yUbTR99+QRN2ukNXQQTGY68oKmVrXnh/et6StM1JF5WHvAJqBigsHG5bt6KxTISoRuncBnH/IRnDqPxKg==", - "license": "MIT", - "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/promises": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/promises/-/promises-2.1.0.tgz", - "integrity": "sha512-eQJaQXA2kD4dVyifzhslV3wOvq27fwOJ4az89BQ4Cz83zPbR94xOeDShwcXrKBYqaUf6XqH5MzdEo14t4tKAFQ==", - "license": "MIT", - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc/-/rpc-2.1.0.tgz", - "integrity": "sha512-myg9qAo6b2WKyHSMXURQykb+ZRnNEXBPLEcwRwkos8STzPPyRFg6ady2s0FCQQTtL/pVjanIU2bObZIzbMGugA==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.1.0", - "@solana/fast-stable-stringify": "2.1.0", - "@solana/functional": "2.1.0", - "@solana/rpc-api": "2.1.0", - "@solana/rpc-spec": "2.1.0", - "@solana/rpc-spec-types": "2.1.0", - "@solana/rpc-transformers": "2.1.0", - "@solana/rpc-transport-http": "2.1.0", - "@solana/rpc-types": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-api": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-api/-/rpc-api-2.1.0.tgz", - "integrity": "sha512-4yCnHYHFlz9VffivoY5q/HVeBjT59byB2gmg7UyC3ktxD28AlF9jjsE5tJKiapAKr2J3KWm0D/rH/QwW14cGeA==", - "license": "MIT", - "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/codecs-core": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/errors": "2.1.0", - "@solana/keys": "2.1.0", - "@solana/rpc-parsed-types": "2.1.0", - "@solana/rpc-spec": "2.1.0", - "@solana/rpc-transformers": "2.1.0", - "@solana/rpc-types": "2.1.0", - "@solana/transaction-messages": "2.1.0", - "@solana/transactions": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-parsed-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-parsed-types/-/rpc-parsed-types-2.1.0.tgz", - "integrity": "sha512-mRzHemxlWDS9p1fPQNKwL+1vEOUMG8peSUJb0X/NbM12yjowDNdzM++fkOgIyCKDPddfkcoNmNrQmr2jwjdN1Q==", - "license": "MIT", - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-spec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-spec/-/rpc-spec-2.1.0.tgz", - "integrity": "sha512-NPAIM5EY7Jke0mHnmoMpgCEb/nZKIo+bgVFK/u+z74gY0JnCNt0DfocStUUQtlhqSmTyoHamt3lfxp4GT2zXbA==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.1.0", - "@solana/rpc-spec-types": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-spec-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-spec-types/-/rpc-spec-types-2.1.0.tgz", - "integrity": "sha512-NxcZ8piXMyCdbNUL6d36QJfL2UAQEN33StlGku0ltTVe1nrokZ5WRNjSPohU1fODlNaZzTvUFzvUkM1yGCkyzw==", - "license": "MIT", - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-subscriptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions/-/rpc-subscriptions-2.1.0.tgz", - "integrity": "sha512-dTyI03VlueE3s7mA/OBlA5l6yKUUKHMJd31tpzxV3AFnqE/QPS5NVrF/WY6pPBobLJiCP0UFOe7eR/MKP9SUCA==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.1.0", - "@solana/fast-stable-stringify": "2.1.0", - "@solana/functional": "2.1.0", - "@solana/promises": "2.1.0", - "@solana/rpc-spec-types": "2.1.0", - "@solana/rpc-subscriptions-api": "2.1.0", - "@solana/rpc-subscriptions-channel-websocket": "2.1.0", - "@solana/rpc-subscriptions-spec": "2.1.0", - "@solana/rpc-transformers": "2.1.0", - "@solana/rpc-types": "2.1.0", - "@solana/subscribable": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-subscriptions-api": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-api/-/rpc-subscriptions-api-2.1.0.tgz", - "integrity": "sha512-de1dBRSE2CUwoZHMXQ/0v7iC+/pG0+iYY8jLHGGNxtKrYbTnV08mXQbaAMrmv2Rk8ZFmfJWbqbYZ9dRWdO3P5g==", - "license": "MIT", - "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/keys": "2.1.0", - "@solana/rpc-subscriptions-spec": "2.1.0", - "@solana/rpc-transformers": "2.1.0", - "@solana/rpc-types": "2.1.0", - "@solana/transaction-messages": "2.1.0", - "@solana/transactions": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-subscriptions-channel-websocket": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-channel-websocket/-/rpc-subscriptions-channel-websocket-2.1.0.tgz", - "integrity": "sha512-goJe9dv0cs967HJ382vSX8yapXgQzRHCmH323LsXrrpj/s3Eb3yUwJq7AcHgoh4gKIqyAfGybq/bE5Aa8Pcm9g==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.1.0", - "@solana/functional": "2.1.0", - "@solana/rpc-subscriptions-spec": "2.1.0", - "@solana/subscribable": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5", - "ws": "^8.18.0" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-subscriptions-spec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-spec/-/rpc-subscriptions-spec-2.1.0.tgz", - "integrity": "sha512-Uqasfd3Tlr22lC/Vy5dToF0e68dMKPdnt4ks7FwXuPdEbNRM/TDGb0GqG+bt/d3IIrNOCA5Y8vsE0nQHGrWG/w==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.1.0", - "@solana/promises": "2.1.0", - "@solana/rpc-spec-types": "2.1.0", - "@solana/subscribable": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-transformers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-transformers/-/rpc-transformers-2.1.0.tgz", - "integrity": "sha512-E2xPlaCu6tNO00v4HIJxJCYkoNwgVJYad5sxbIUZOQBWwXnWIcll2jUT4bWKpBGq5vFDYfkzRBr8Rco3DhfXqg==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.1.0", - "@solana/functional": "2.1.0", - "@solana/rpc-spec-types": "2.1.0", - "@solana/rpc-types": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-transport-http": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-transport-http/-/rpc-transport-http-2.1.0.tgz", - "integrity": "sha512-E3UovTBid4/S8QDd9FkADVKfyG+v7CW5IqI4c27ZDKfazCsnDLLkqh98C6BvNCqi278HKBui4lI2GoFpCq89Pw==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.1.0", - "@solana/rpc-spec": "2.1.0", - "@solana/rpc-spec-types": "2.1.0", - "undici-types": "^7.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/rpc-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-types/-/rpc-types-2.1.0.tgz", - "integrity": "sha512-1ODnhmpR1X/GjB7hs4gVR3mcCagfPQV0dzq/2DNuCiMjx2snn64KP5WoAHfBEyoC9/Rb36+JpNj/hLAOikipKA==", - "license": "MIT", - "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/codecs-core": "2.1.0", - "@solana/codecs-numbers": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/signers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/signers/-/signers-2.1.0.tgz", - "integrity": "sha512-Yq0JdJnCecRsSBshNWy+OIRmAGeVfjwIh9Z+H1jv8u8p+dJCOreKakTWuxMt5tnj3q5K1mPcak9O2PqVPZ0teA==", - "license": "MIT", - "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/codecs-core": "2.1.0", - "@solana/errors": "2.1.0", - "@solana/instructions": "2.1.0", - "@solana/keys": "2.1.0", - "@solana/transaction-messages": "2.1.0", - "@solana/transactions": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/subscribable": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/subscribable/-/subscribable-2.1.0.tgz", - "integrity": "sha512-xi12Cm889+uT5sRKnIzr7nLnHAp3hiR3dqIzrT1P7z7iEGp8OnqUQIQCHlgozFHM2cPW+6685NQXk1l1ImuJIw==", - "license": "MIT", - "dependencies": { - "@solana/errors": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/sysvars": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/sysvars/-/sysvars-2.1.0.tgz", - "integrity": "sha512-GXu9yS0zIebmM1Unqw/XFpYuvug03m42w98ioOPV/yiHzECggGRGpHGD9RLVYnkyz0eL4NRbnJ5dAEu/fvGe0A==", - "license": "MIT", - "dependencies": { - "@solana/accounts": "2.1.0", - "@solana/codecs": "2.1.0", - "@solana/errors": "2.1.0", - "@solana/rpc-types": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/transaction-confirmation": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/transaction-confirmation/-/transaction-confirmation-2.1.0.tgz", - "integrity": "sha512-VxOvtvs2e9h5u73PHyE2TptLAMO5x6dOXlOgvq1Nk6l3rKM2HAsd+KDpN7gjOo8/EgItMMmyEilXygWWRgpSIA==", - "license": "MIT", - "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/errors": "2.1.0", - "@solana/keys": "2.1.0", - "@solana/promises": "2.1.0", - "@solana/rpc": "2.1.0", - "@solana/rpc-subscriptions": "2.1.0", - "@solana/rpc-types": "2.1.0", - "@solana/transaction-messages": "2.1.0", - "@solana/transactions": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/transaction-messages": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/transaction-messages/-/transaction-messages-2.1.0.tgz", - "integrity": "sha512-+GPzZHLYNFbqHKoiL8mYALp7eAXtAbI6zLViZpIM3zUbVNU3q5+FCKGv6jCBnxs+3QCbeapu+W1OyfDa6BUtTQ==", - "license": "MIT", - "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/codecs-core": "2.1.0", - "@solana/codecs-data-structures": "2.1.0", - "@solana/codecs-numbers": "2.1.0", - "@solana/errors": "2.1.0", - "@solana/functional": "2.1.0", - "@solana/instructions": "2.1.0", - "@solana/rpc-types": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/@solana/transactions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@solana/transactions/-/transactions-2.1.0.tgz", - "integrity": "sha512-QeM4sCItReeIy5LU7LhGkz7RPfMPTg/Qo8h0LSfhiJiPTOHOhElmh42vkLJmwPl83+MsKtisyPQNK6penM2nAw==", - "license": "MIT", - "dependencies": { - "@solana/addresses": "2.1.0", - "@solana/codecs-core": "2.1.0", - "@solana/codecs-data-structures": "2.1.0", - "@solana/codecs-numbers": "2.1.0", - "@solana/codecs-strings": "2.1.0", - "@solana/errors": "2.1.0", - "@solana/functional": "2.1.0", - "@solana/instructions": "2.1.0", - "@solana/keys": "2.1.0", - "@solana/rpc-types": "2.1.0", - "@solana/transaction-messages": "2.1.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/ethers": { - "version": "6.13.5", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.5.tgz", - "integrity": "sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==", + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "dev": true, "funding": [ { "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@bitpay-labs/crypto-wallet-core/node_modules/ethers/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@ethereumjs/rlp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", - "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ethereumjs/util": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", - "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/rlp": "^5.0.2", - "ethereum-cryptography": "^2.2.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { "type": "individual", @@ -1440,3275 +524,1898 @@ "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.5.tgz", - "integrity": "sha512-iouYNlPxRAwZ2XboDT+OfRKHuaKHiqjB5VFYZ0NFrHkbEF+AV3muIUY9olQsp8uxU4VvRCMiRk9ftzFDGb61aw==", - "license": "Apache-2.0", - "dependencies": { - "@grpc/proto-loader": "^0.7.8", - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", - "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", - "license": "Apache-2.0", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.4", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/@nomicfoundation/edr": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.17.tgz", - "integrity": "sha512-Y8Kwqd5JpBmI/Kst6NJ/bZ81FeJea9J6WEwoSRTZnEvwfqW9dk9PI8zJs2UJpOACL1fXEPvN+doETbxT9EhwXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.17", - "@nomicfoundation/edr-darwin-x64": "0.12.0-next.17", - "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.17", - "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.17", - "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.17", - "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.17", - "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.17" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.17.tgz", - "integrity": "sha512-gI9/9ysLeAid0+VSTBeutxOJ0/Rrh00niGkGL9+4lR577igDY+v55XGN0oBMST49ILS0f12J6ZY90LG8sxPXmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.17.tgz", - "integrity": "sha512-zSZtwf584RkIyb8awELDt7ctskogH0p4pmqOC4vhykc8ODOv2XLuG1IgeE4WgYhWGZOufbCtgLfpJQrWqN6mmw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.17.tgz", - "integrity": "sha512-WjdfgV6B7gT5Q0NXtSIWyeK8gzaJX5HK6/jclYVHarWuEtS1LFgePYgMjK8rmm7IRTkM9RsE/PCuQEP1nrSsuA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.17.tgz", - "integrity": "sha512-26rObKhhCDb9JkZbToyr7JVZo4tSVAFvzoJSJVmvpOl0LOHrfFsgVQu2n/8cNkwMAqulPubKL2E0jdnmEoZjWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.17.tgz", - "integrity": "sha512-dPkHScIf/CU6h6k3k4HNUnQyQcVSLKanviHCAcs5HkviiJPxvVtOMMvtNBxoIvKZRxGFxf2eutcqQW4ZV1wRQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.17.tgz", - "integrity": "sha512-5Ixe/bpyWZxC3AjIb8EomAOK44ajemBVx/lZRHZiWSBlwQpbSWriYAtKjKcReQQPwuYVjnFpAD2AtuCvseIjHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.17.tgz", - "integrity": "sha512-29YlvdgofSdXG1mUzIuH4kMXu1lmVc1hvYWUGWEH59L+LaakdhfJ/Wu5izeclKkrTh729Amtk/Hk1m29kFOO8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", - "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" - }, - "peerDependencies": { - "ethers": "^6.14.0", - "hardhat": "^2.28.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition": { - "version": "0.15.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.16.tgz", - "integrity": "sha512-T0JTnuib7QcpsWkHCPLT7Z6F483EjTdcdjb1e00jqS9zTGCPqinPB66LLtR/duDLdvgoiCVS6K8WxTQkA/xR1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nomicfoundation/ignition-core": "^0.15.15", - "@nomicfoundation/ignition-ui": "^0.15.13", - "chalk": "^4.0.0", - "debug": "^4.3.2", - "fs-extra": "^10.0.0", - "json5": "^2.2.3", - "prompts": "^2.4.2" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-verify": "^2.1.0", - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition-ethers": { - "version": "0.15.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.17.tgz", - "integrity": "sha512-io6Wrp1dUsJ94xEI3pw6qkPfhc9TFA+e6/+o16yQ8pvBTFMjgK5x8wIHKrrIHr9L3bkuTMtmDjyN4doqO2IqFQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.1.0", - "@nomicfoundation/hardhat-ignition": "^0.15.16", - "@nomicfoundation/ignition-core": "^0.15.15", - "ethers": "^6.14.0", - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", - "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "debug": "^4.1.1", - "lodash.clonedeep": "^4.5.0", - "picocolors": "^1.1.0", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/ignition-core": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.15.tgz", - "integrity": "sha512-JdKFxYknTfOYtFXMN6iFJ1vALJPednuB+9p9OwGIRdoI6HYSh4ZBzyRURgyXtHFyaJ/SF9lBpsYV9/1zEpcYwg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/address": "5.6.1", - "@nomicfoundation/solidity-analyzer": "^0.1.1", - "cbor": "^9.0.0", - "debug": "^4.3.2", - "ethers": "^6.14.0", - "fs-extra": "^10.0.0", - "immer": "10.0.2", - "lodash": "4.17.21", - "ndjson": "2.0.0" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", - "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@nomicfoundation/ignition-ui": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.13.tgz", - "integrity": "sha512-HbTszdN1iDHCkUS9hLeooqnLEW2U45FaqFwFEYT8nIno2prFZhG+n68JEERjmfFCB5u0WgbuJwk3CgLoqtSL7Q==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", - "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", - "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", - "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", - "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", - "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", - "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", - "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, - "node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", - "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "type-detect": "^4.1.0" - } - }, - "node_modules/@sinonjs/samsam/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@solana-program/address-lookup-table": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@solana-program/address-lookup-table/-/address-lookup-table-0.7.0.tgz", - "integrity": "sha512-dzCeIO5LtiK3bIg0AwO+TPeGURjSG2BKt0c4FRx7105AgLy7uzTktpUzUj6NXAK9SzbirI8HyvHUvw1uvL8O9A==", - "license": "Apache-2.0", - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana-program/compute-budget": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@solana-program/compute-budget/-/compute-budget-0.7.0.tgz", - "integrity": "sha512-/JJSE1fKO5zx7Z55Z2tLGWBDDi7tUE+xMlK8qqkHlY51KpqksMsIBzQMkG9Dqhoe2Cnn5/t3QK1nJKqW6eHzpg==", - "license": "Apache-2.0", - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana-program/memo": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@solana-program/memo/-/memo-0.7.0.tgz", - "integrity": "sha512-3T9iUjWSYtN/5S5jzJuasD2yQfVfFAQ9yTwIE25+P9peWqz4oarn6ZQvRj/FLcBqaMLtSqLhU1hN2cyVBS6hyg==", - "license": "Apache-2.0", - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana-program/system": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@solana-program/system/-/system-0.7.0.tgz", - "integrity": "sha512-FKTBsKHpvHHNc1ATRm7SlC5nF/VdJtOSjldhcyfMN9R7xo712Mo2jHIzvBgn8zQO5Kg0DcWuKB7268Kv1ocicw==", - "license": "Apache-2.0", - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana-program/token": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@solana-program/token/-/token-0.5.1.tgz", - "integrity": "sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag==", - "license": "Apache-2.0", - "peerDependencies": { - "@solana/kit": "^2.1.0" - } - }, - "node_modules/@solana/accounts": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/accounts/-/accounts-2.3.0.tgz", - "integrity": "sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/rpc-spec": "2.3.0", - "@solana/rpc-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/addresses": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/addresses/-/addresses-2.3.0.tgz", - "integrity": "sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/assertions": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/nominal-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/assertions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/assertions/-/assertions-2.3.0.tgz", - "integrity": "sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.3.0.tgz", - "integrity": "sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/codecs-data-structures": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/options": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs-core": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", - "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs-data-structures": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.3.0.tgz", - "integrity": "sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs-numbers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", - "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/codecs-strings": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.3.0.tgz", - "integrity": "sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "fastestsmallesttextencoderdecoder": "^1.0.22", - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/errors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", - "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "chalk": "^5.4.1", - "commander": "^14.0.0" - }, - "bin": { - "errors": "bin/cli.mjs" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/errors/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@solana/errors/node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20" - } - }, - "node_modules/@solana/fast-stable-stringify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/fast-stable-stringify/-/fast-stable-stringify-2.3.0.tgz", - "integrity": "sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/functional": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/functional/-/functional-2.3.0.tgz", - "integrity": "sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/instructions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/instructions/-/instructions-2.3.0.tgz", - "integrity": "sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/keys": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/keys/-/keys-2.3.0.tgz", - "integrity": "sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/assertions": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/nominal-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/kit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/kit/-/kit-2.3.0.tgz", - "integrity": "sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/accounts": "2.3.0", - "@solana/addresses": "2.3.0", - "@solana/codecs": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/instructions": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/programs": "2.3.0", - "@solana/rpc": "2.3.0", - "@solana/rpc-parsed-types": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/rpc-subscriptions": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/signers": "2.3.0", - "@solana/sysvars": "2.3.0", - "@solana/transaction-confirmation": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/nominal-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/nominal-types/-/nominal-types-2.3.0.tgz", - "integrity": "sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/options": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.3.0.tgz", - "integrity": "sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/codecs-data-structures": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/programs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/programs/-/programs-2.3.0.tgz", - "integrity": "sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/promises": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/promises/-/promises-2.3.0.tgz", - "integrity": "sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc/-/rpc-2.3.0.tgz", - "integrity": "sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/fast-stable-stringify": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/rpc-api": "2.3.0", - "@solana/rpc-spec": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/rpc-transformers": "2.3.0", - "@solana/rpc-transport-http": "2.3.0", - "@solana/rpc-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-api/-/rpc-api-2.3.0.tgz", - "integrity": "sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/rpc-parsed-types": "2.3.0", - "@solana/rpc-spec": "2.3.0", - "@solana/rpc-transformers": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-parsed-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-parsed-types/-/rpc-parsed-types-2.3.0.tgz", - "integrity": "sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "@ethersproject/signing-key": "^5.8.0" } }, - "node_modules/@solana/rpc-spec": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-spec/-/rpc-spec-2.3.0.tgz", - "integrity": "sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==", + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "peer": true, "dependencies": { - "@solana/errors": "2.3.0", - "@solana/rpc-spec-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@solana/rpc-spec-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-spec-types/-/rpc-spec-types-2.3.0.tgz", - "integrity": "sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==", + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "node": ">=14" } }, - "node_modules/@solana/rpc-subscriptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions/-/rpc-subscriptions-2.3.0.tgz", - "integrity": "sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==", - "license": "MIT", - "peer": true, + "node_modules/@grpc/grpc-js": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.5.tgz", + "integrity": "sha512-iouYNlPxRAwZ2XboDT+OfRKHuaKHiqjB5VFYZ0NFrHkbEF+AV3muIUY9olQsp8uxU4VvRCMiRk9ftzFDGb61aw==", + "license": "Apache-2.0", "dependencies": { - "@solana/errors": "2.3.0", - "@solana/fast-stable-stringify": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/promises": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/rpc-subscriptions-api": "2.3.0", - "@solana/rpc-subscriptions-channel-websocket": "2.3.0", - "@solana/rpc-subscriptions-spec": "2.3.0", - "@solana/rpc-transformers": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/subscribable": "2.3.0" + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" }, "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/@solana/rpc-subscriptions-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-api/-/rpc-subscriptions-api-2.3.0.tgz", - "integrity": "sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==", - "license": "MIT", - "peer": true, + "node_modules/@grpc/proto-loader": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", + "license": "Apache-2.0", "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/rpc-subscriptions-spec": "2.3.0", - "@solana/rpc-transformers": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" }, - "peerDependencies": { - "typescript": ">=5.3.3" - } - }, - "node_modules/@solana/rpc-subscriptions-channel-websocket": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-channel-websocket/-/rpc-subscriptions-channel-websocket-2.3.0.tgz", - "integrity": "sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/rpc-subscriptions-spec": "2.3.0", - "@solana/subscribable": "2.3.0" + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" }, "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3", - "ws": "^8.18.0" + "node": ">=6" } }, - "node_modules/@solana/rpc-subscriptions-spec": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-spec/-/rpc-subscriptions-spec-2.3.0.tgz", - "integrity": "sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==", - "license": "MIT", - "peer": true, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", "dependencies": { - "@solana/errors": "2.3.0", - "@solana/promises": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/subscribable": "2.3.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "node": ">=12" } }, - "node_modules/@solana/rpc-transformers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-transformers/-/rpc-transformers-2.3.0.tgz", - "integrity": "sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/nominal-types": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "@solana/rpc-types": "2.3.0" - }, "engines": { - "node": ">=20.18.0" + "node": ">=12" }, - "peerDependencies": { - "typescript": ">=5.3.3" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@solana/rpc-transport-http": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-transport-http/-/rpc-transport-http-2.3.0.tgz", - "integrity": "sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@solana/errors": "2.3.0", - "@solana/rpc-spec": "2.3.0", - "@solana/rpc-spec-types": "2.3.0", - "undici-types": "^7.11.0" - }, "engines": { - "node": ">=20.18.0" + "node": ">=12" }, - "peerDependencies": { - "typescript": ">=5.3.3" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@solana/rpc-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/rpc-types/-/rpc-types-2.3.0.tgz", - "integrity": "sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/nominal-types": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" - } + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" }, - "node_modules/@solana/signers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/signers/-/signers-2.3.0.tgz", - "integrity": "sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/instructions": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/nominal-types": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=20.18.0" + "node": ">=12" }, - "peerDependencies": { - "typescript": ">=5.3.3" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@solana/subscribable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/subscribable/-/subscribable-2.3.0.tgz", - "integrity": "sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@solana/errors": "2.3.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=20.18.0" + "node": ">=12" }, - "peerDependencies": { - "typescript": ">=5.3.3" + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@solana/sysvars": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/sysvars/-/sysvars-2.3.0.tgz", - "integrity": "sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@solana/accounts": "2.3.0", - "@solana/codecs": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/rpc-types": "2.3.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=20.18.0" + "node": ">=12" }, - "peerDependencies": { - "typescript": ">=5.3.3" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@solana/transaction-confirmation": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/transaction-confirmation/-/transaction-confirmation-2.3.0.tgz", - "integrity": "sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/promises": "2.3.0", - "@solana/rpc": "2.3.0", - "@solana/rpc-subscriptions": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/transaction-messages": "2.3.0", - "@solana/transactions": "2.3.0" - }, "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "node": ">=8" } }, - "node_modules/@solana/transaction-messages": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/transaction-messages/-/transaction-messages-2.3.0.tgz", - "integrity": "sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-data-structures": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/instructions": "2.3.0", - "@solana/nominal-types": "2.3.0", - "@solana/rpc-types": "2.3.0" - }, "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "node": ">=6.0.0" } }, - "node_modules/@solana/transactions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/transactions/-/transactions-2.3.0.tgz", - "integrity": "sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@solana/addresses": "2.3.0", - "@solana/codecs-core": "2.3.0", - "@solana/codecs-data-structures": "2.3.0", - "@solana/codecs-numbers": "2.3.0", - "@solana/codecs-strings": "2.3.0", - "@solana/errors": "2.3.0", - "@solana/functional": "2.3.0", - "@solana/instructions": "2.3.0", - "@solana/keys": "2.3.0", - "@solana/nominal-types": "2.3.0", - "@solana/rpc-types": "2.3.0", - "@solana/transaction-messages": "2.3.0" + "@noble/hashes": "1.3.2" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", "engines": { - "node": ">=20.18.0" + "node": ">= 16" }, - "peerDependencies": { - "typescript": ">=5.3.3" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/brorand": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/@types/brorand/-/brorand-1.0.33.tgz", - "integrity": "sha512-KmNsWYtzKXpmxjecvYWUEGK5biJB/1kpHRObHZD8eme1tz/TvbESbZeNAHPRNd5qyCJiHk2ztbNzKbPC6TuPFg==", + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.17.tgz", + "integrity": "sha512-Y8Kwqd5JpBmI/Kst6NJ/bZ81FeJea9J6WEwoSRTZnEvwfqW9dk9PI8zJs2UJpOACL1fXEPvN+doETbxT9EhwXA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.17", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.17", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.17", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.17", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.17", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.17", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.17" + }, + "engines": { + "node": ">= 20" } }, - "node_modules/@types/caseless": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.17.tgz", + "integrity": "sha512-gI9/9ysLeAid0+VSTBeutxOJ0/Rrh00niGkGL9+4lR577igDY+v55XGN0oBMST49ILS0f12J6ZY90LG8sxPXmQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 20" + } }, - "node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.17.tgz", + "integrity": "sha512-zSZtwf584RkIyb8awELDt7ctskogH0p4pmqOC4vhykc8ODOv2XLuG1IgeE4WgYhWGZOufbCtgLfpJQrWqN6mmw==", + "dev": true, "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" + "engines": { + "node": ">= 20" } }, - "node_modules/@types/node/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "license": "MIT" + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.17.tgz", + "integrity": "sha512-WjdfgV6B7gT5Q0NXtSIWyeK8gzaJX5HK6/jclYVHarWuEtS1LFgePYgMjK8rmm7IRTkM9RsE/PCuQEP1nrSsuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } }, - "node_modules/@types/request": { - "version": "2.48.10", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.10.tgz", - "integrity": "sha512-18CiR2ITJ1ea8/lQyHaCC2M3ypv76lK4egpUY2ve03kq/lU+xQmPp2H4N5BKVHGQuDm2uqb1IC6Fqv8eYp4wng==", + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.17.tgz", + "integrity": "sha512-26rObKhhCDb9JkZbToyr7JVZo4tSVAFvzoJSJVmvpOl0LOHrfFsgVQu2n/8cNkwMAqulPubKL2E0jdnmEoZjWA==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" + "engines": { + "node": ">= 20" } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "license": "MIT" + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.17.tgz", + "integrity": "sha512-dPkHScIf/CU6h6k3k4HNUnQyQcVSLKanviHCAcs5HkviiJPxvVtOMMvtNBxoIvKZRxGFxf2eutcqQW4ZV1wRQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } }, - "node_modules/@types/ws": { - "version": "8.5.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.7.tgz", - "integrity": "sha512-6UrLjiDUvn40CMrAubXuIVtj2PEfKDffJS7ychvnPU44j+KVeXmdHHTgqcM/dxLUTHxlXHiFM8Skmb8ozGdTnQ==", + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.17.tgz", + "integrity": "sha512-5Ixe/bpyWZxC3AjIb8EomAOK44ajemBVx/lZRHZiWSBlwQpbSWriYAtKjKcReQQPwuYVjnFpAD2AtuCvseIjHw==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">= 20" } }, - "node_modules/@xrplf/isomorphic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@xrplf/isomorphic/-/isomorphic-1.0.2.tgz", - "integrity": "sha512-ncZUdMXr6VlSXtdoiDi0jTH+gBrgGxwVeEidhoegII3PmyErbQsyj6e+j7acmR4LW/lvBkPkzb9QzRfJH0n3rA==", - "license": "ISC", - "dependencies": { - "@noble/hashes": "^2.0.1", - "eventemitter3": "5.0.1", - "ws": "^8.20.0" - }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.17.tgz", + "integrity": "sha512-29YlvdgofSdXG1mUzIuH4kMXu1lmVc1hvYWUGWEH59L+LaakdhfJ/Wu5izeclKkrTh729Amtk/Hk1m29kFOO8A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">= 20" } }, - "node_modules/@xrplf/isomorphic/node_modules/@noble/hashes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", - "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", + "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 20.19.0" + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "ethers": "^6.14.0", + "hardhat": "^2.28.0" } }, - "node_modules/@xrplf/isomorphic/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, - "node_modules/abitype": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", - "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "node_modules/@nomicfoundation/hardhat-ignition": { + "version": "0.15.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.16.tgz", + "integrity": "sha512-T0JTnuib7QcpsWkHCPLT7Z6F483EjTdcdjb1e00jqS9zTGCPqinPB66LLtR/duDLdvgoiCVS6K8WxTQkA/xR1Q==", + "dev": true, "license": "MIT", - "peerDependencies": { - "typescript": ">=4.9.4", - "zod": "^3 >=3.19.1" + "peer": true, + "dependencies": { + "@nomicfoundation/ignition-core": "^0.15.15", + "@nomicfoundation/ignition-ui": "^0.15.13", + "chalk": "^4.0.0", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "json5": "^2.2.3", + "prompts": "^2.4.2" }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } + "peerDependencies": { + "@nomicfoundation/hardhat-verify": "^2.1.0", + "hardhat": "^2.26.0" } }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "node_modules/@nomicfoundation/hardhat-ignition-ethers": { + "version": "0.15.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.17.tgz", + "integrity": "sha512-io6Wrp1dUsJ94xEI3pw6qkPfhc9TFA+e6/+o16yQ8pvBTFMjgK5x8wIHKrrIHr9L3bkuTMtmDjyN4doqO2IqFQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.3.0" + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.1.0", + "@nomicfoundation/hardhat-ignition": "^0.15.16", + "@nomicfoundation/ignition-core": "^0.15.15", + "ethers": "^6.14.0", + "hardhat": "^2.26.0" } }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", + "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "debug": "4" + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" }, - "engines": { - "node": ">= 6.0.0" + "peerDependencies": { + "hardhat": "^2.26.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@nomicfoundation/ignition-core": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.15.tgz", + "integrity": "sha512-JdKFxYknTfOYtFXMN6iFJ1vALJPednuB+9p9OwGIRdoI6HYSh4ZBzyRURgyXtHFyaJ/SF9lBpsYV9/1zEpcYwg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "cbor": "^9.0.0", + "debug": "^4.3.2", + "ethers": "^6.14.0", + "fs-extra": "^10.0.0", + "immer": "10.0.2", + "lodash": "4.17.21", + "ndjson": "2.0.0" } }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", "dev": true, - "license": "ISC", + "license": "MIT", + "peer": true, "dependencies": { - "string-width": "^4.1.0" + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/@nomicfoundation/ignition-ui": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.13.tgz", + "integrity": "sha512-HbTszdN1iDHCkUS9hLeooqnLEW2U45FaqFwFEYT8nIno2prFZhG+n68JEERjmfFCB5u0WgbuJwk3CgLoqtSL7Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, + "optional": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 12" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">=8" + "node": ">= 12" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "optional": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">= 8" + "node": ">= 12" } }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">= 12" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "dev": true, - "license": "Python-2.0" - }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", - "peer": true, + "optional": true, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "license": "MIT" + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" }, - "node_modules/asyncjs-util": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/asyncjs-util/-/asyncjs-util-1.2.12.tgz", - "integrity": "sha512-ZuiV9aMltl2Db9AB+4h0esHOc642ktBivOhyV3ZHQ4nHwSPH7KiLIxiPTubO4cyx6aJ1Cb5ASJVHUiTk+6DVQQ==", - "license": "MIT", - "dependencies": { - "async": "3.2.4" - } + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/balanced-match": { + "node_modules/@protobufjs/float": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" }, - "node_modules/bech32": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", - "license": "MIT" + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" }, - "node_modules/bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", - "license": "MIT", - "engines": { - "node": "*" - } + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", "dependencies": { - "file-uri-to-path": "1.0.0" + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "node_modules/bip174": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.1.tgz", - "integrity": "sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==", + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", - "engines": { - "node": ">=8.0.0" + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, - "node_modules/bip32": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", - "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", - "license": "MIT", + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/node": "10.12.18", - "bs58check": "^2.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.1.3", - "typeforce": "^1.11.5", - "wif": "^2.0.6" + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, - "node_modules/bip32/node_modules/@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==", - "license": "MIT" + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" }, - "node_modules/bip32/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", - "license": "MIT", + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "safe-buffer": "^5.0.1" + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/bip32/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "license": "MIT" + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" }, - "node_modules/bip32/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "license": "MIT", + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "base-x": "^3.0.2" + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/bip32/node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "license": "MIT", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" }, - "node_modules/bip32/node_modules/tiny-secp256k1": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.7.tgz", - "integrity": "sha512-eb+F6NabSnjbLwNoC+2o5ItbmP1kg7HliWue71JgLegQt6A5mTN8YbvTLCazdlg6e5SV6A+r8OGvZYskdlmhqQ==", - "hasInstallScript": true, - "license": "MIT", + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "bindings": "^1.3.0", - "bn.js": "^4.11.8", - "create-hmac": "^1.1.7", - "elliptic": "^6.4.0", - "nan": "^2.13.2" + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" }, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, - "node_modules/bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "license": "ISC", - "dependencies": { - "@noble/hashes": "^1.2.0" - } + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" }, - "node_modules/bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/bitcoin-ops": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", - "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==", - "license": "MIT" + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" }, - "node_modules/bitcoind-rpc": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/bitcoind-rpc/-/bitcoind-rpc-0.9.1.tgz", - "integrity": "sha512-fWjepYe3I6W8pw8WiDUrHAMKZXyRqtm6HfcUaDeLAQLr1KoKcVzqR4xzdJFJgUMBShNmN4GRMg0rLFr6ZKGZ6A==", - "license": "MIT" + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } }, - "node_modules/bitcoinjs-lib": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz", - "integrity": "sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==", - "license": "MIT", + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.1", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "license": "MIT" + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" }, - "node_modules/bolt07": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.8.4.tgz", - "integrity": "sha512-UyZRSYmVE8K++Jg1BiJrUkxQak03aS/s7ESKDsBdBPzaTlk2E09Y0JYa9HhWN7MRn48Y2K1doOzkb1Hn6XixZw==", - "license": "MIT", + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "bn.js": "5.2.1" - } - }, - "node_modules/bolt07/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" - }, - "node_modules/bolt09": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-2.0.0.tgz", - "integrity": "sha512-QtQiDx/nLMMwj+eaJ2tl2UoMa/8K2d8TfRVznHL0DP3cE/bYl4dPueQvSjqej9FVj+iMtrkpkIE5InuodpHmpg==", - "license": "MIT", - "engines": { - "node": ">=18" + "type-detect": "4.0.8" } }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@sinonjs/commons": "^3.0.1" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@sinonjs/samsam": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", + "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "type-detect": "^4.1.0" } }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "node_modules/@solana-program/address-lookup-table": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@solana-program/address-lookup-table/-/address-lookup-table-0.7.0.tgz", + "integrity": "sha512-dzCeIO5LtiK3bIg0AwO+TPeGURjSG2BKt0c4FRx7105AgLy7uzTktpUzUj6NXAK9SzbirI8HyvHUvw1uvL8O9A==", + "license": "Apache-2.0", + "peerDependencies": { + "@solana/kit": "^2.1.0" + } + }, + "node_modules/@solana/accounts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/accounts/-/accounts-2.3.0.tgz", + "integrity": "sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==", "license": "MIT", + "peer": true, "dependencies": { - "fill-range": "^7.1.1" + "@solana/addresses": "2.3.0", + "@solana/codecs-core": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/rpc-spec": "2.3.0", + "@solana/rpc-types": "2.3.0" }, "engines": { - "node": ">=8" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" - }, - "node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "node_modules/@solana/addresses": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/addresses/-/addresses-2.3.0.tgz", + "integrity": "sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==", "license": "MIT", + "peer": true, "dependencies": { - "base-x": "^4.0.0" + "@solana/assertions": "2.3.0", + "@solana/codecs-core": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/nominal-types": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/bs58check": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", - "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", + "node_modules/@solana/assertions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/assertions/-/assertions-2.3.0.tgz", + "integrity": "sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==", "license": "MIT", + "peer": true, "dependencies": { - "@noble/hashes": "^1.2.0", - "bs58": "^5.0.0" + "@solana/errors": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@solana/codecs": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs/-/codecs-2.3.0.tgz", + "integrity": "sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==", "license": "MIT", + "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@solana/codecs-core": "2.3.0", + "@solana/codecs-data-structures": "2.3.0", + "@solana/codecs-numbers": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/options": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/buffer-compare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", - "integrity": "sha512-O6NvNiHZMd3mlIeMDjP6t/gPG75OqGPeiRZXoMQZJ6iy9GofCls4Ijs5YkPZZwoysizLiedhticmdyx/GyHghA==" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, + "node_modules/@solana/codecs-core": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", + "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", "license": "MIT", + "peer": true, + "dependencies": { + "@solana/errors": "2.3.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/c8": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", - "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", - "dev": true, - "license": "ISC", + "node_modules/@solana/codecs-data-structures": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.3.0.tgz", + "integrity": "sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==", + "license": "MIT", + "peer": true, "dependencies": { - "@bcoe/v8-coverage": "^1.0.1", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^7.0.1", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" + "@solana/codecs-core": "2.3.0", + "@solana/codecs-numbers": "2.3.0", + "@solana/errors": "2.3.0" }, "engines": { - "node": ">=18" + "node": ">=20.18.0" }, "peerDependencies": { - "monocart-coverage-reports": "^2" - }, - "peerDependenciesMeta": { - "monocart-coverage-reports": { - "optional": true - } + "typescript": ">=5.3.3" } }, - "node_modules/c8/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", + "node_modules/@solana/codecs-numbers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", + "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", + "license": "MIT", + "peer": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "@solana/codecs-core": "2.3.0", + "@solana/errors": "2.3.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/c8/node_modules/glob/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", + "node_modules/@solana/codecs-strings": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.3.0.tgz", + "integrity": "sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==", + "license": "MIT", + "peer": true, "dependencies": { - "brace-expansion": "^2.0.2" + "@solana/codecs-core": "2.3.0", + "@solana/codecs-numbers": "2.3.0", + "@solana/errors": "2.3.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "fastestsmallesttextencoderdecoder": "^1.0.22", + "typescript": ">=5.3.3" } }, - "node_modules/c8/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/c8/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/@solana/errors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", + "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", + "license": "MIT", + "peer": true, "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "chalk": "^5.4.1", + "commander": "^14.0.0" + }, + "bin": { + "errors": "bin/cli.mjs" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/c8/node_modules/test-exclude": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", - "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^10.2.2" + "node_modules/@solana/errors/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@solana/errors/node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=18" + "node": ">=20" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/@solana/fast-stable-stringify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/fast-stable-stringify/-/fast-stable-stringify-2.3.0.tgz", + "integrity": "sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==", "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/@solana/functional": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/functional/-/functional-2.3.0.tgz", + "integrity": "sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==", "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/@solana/instructions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/instructions/-/instructions-2.3.0.tgz", + "integrity": "sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==", "license": "MIT", + "peer": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "@solana/codecs-core": "2.3.0", + "@solana/errors": "2.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, + "node_modules/@solana/keys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/keys/-/keys-2.3.0.tgz", + "integrity": "sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==", "license": "MIT", + "peer": true, + "dependencies": { + "@solana/assertions": "2.3.0", + "@solana/codecs-core": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/nominal-types": "2.3.0" + }, "engines": { - "node": ">=10" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, + "node_modules/@solana/kit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/kit/-/kit-2.3.0.tgz", + "integrity": "sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==", "license": "MIT", "peer": true, "dependencies": { - "nofilter": "^3.1.0" + "@solana/accounts": "2.3.0", + "@solana/addresses": "2.3.0", + "@solana/codecs": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/functional": "2.3.0", + "@solana/instructions": "2.3.0", + "@solana/keys": "2.3.0", + "@solana/programs": "2.3.0", + "@solana/rpc": "2.3.0", + "@solana/rpc-parsed-types": "2.3.0", + "@solana/rpc-spec-types": "2.3.0", + "@solana/rpc-subscriptions": "2.3.0", + "@solana/rpc-types": "2.3.0", + "@solana/signers": "2.3.0", + "@solana/sysvars": "2.3.0", + "@solana/transaction-confirmation": "2.3.0", + "@solana/transaction-messages": "2.3.0", + "@solana/transactions": "2.3.0" }, "engines": { - "node": ">=12.19" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/chai": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", - "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==", - "dev": true, + "node_modules/@solana/nominal-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/nominal-types/-/nominal-types-2.3.0.tgz", + "integrity": "sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==", "license": "MIT", + "peer": true, "engines": { - "node": ">=18" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@solana/options": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/options/-/options-2.3.0.tgz", + "integrity": "sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==", "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@solana/codecs-core": "2.3.0", + "@solana/codecs-data-structures": "2.3.0", + "@solana/codecs-numbers": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/errors": "2.3.0" }, "engines": { - "node": ">=10" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, + "node_modules/@solana/programs": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/programs/-/programs-2.3.0.tgz", + "integrity": "sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==", "license": "MIT", + "peer": true, "dependencies": { - "readdirp": "^4.0.1" + "@solana/addresses": "2.3.0", + "@solana/errors": "2.3.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">=20.18.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "license": "MIT" + "node_modules/@solana/promises": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/promises/-/promises-2.3.0.tgz", + "integrity": "sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" + } }, - "node_modules/cipher-base": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "node_modules/@solana/rpc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc/-/rpc-2.3.0.tgz", + "integrity": "sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==", "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" + "@solana/errors": "2.3.0", + "@solana/fast-stable-stringify": "2.3.0", + "@solana/functional": "2.3.0", + "@solana/rpc-api": "2.3.0", + "@solana/rpc-spec": "2.3.0", + "@solana/rpc-spec-types": "2.3.0", + "@solana/rpc-transformers": "2.3.0", + "@solana/rpc-transport-http": "2.3.0", + "@solana/rpc-types": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" }, - "engines": { - "node": ">= 0.10" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, + "node_modules/@solana/rpc-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-api/-/rpc-api-2.3.0.tgz", + "integrity": "sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==", "license": "MIT", + "peer": true, + "dependencies": { + "@solana/addresses": "2.3.0", + "@solana/codecs-core": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/keys": "2.3.0", + "@solana/rpc-parsed-types": "2.3.0", + "@solana/rpc-spec": "2.3.0", + "@solana/rpc-transformers": "2.3.0", + "@solana/rpc-types": "2.3.0", + "@solana/transaction-messages": "2.3.0", + "@solana/transactions": "2.3.0" + }, "engines": { - "node": ">=6" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, + "node_modules/@solana/rpc-parsed-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-parsed-types/-/rpc-parsed-types-2.3.0.tgz", + "integrity": "sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==", "license": "MIT", + "peer": true, "engines": { - "node": ">=6" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", + "node_modules/@solana/rpc-spec": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-spec/-/rpc-spec-2.3.0.tgz", + "integrity": "sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==", + "license": "MIT", + "peer": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@solana/errors": "2.3.0", + "@solana/rpc-spec-types": "2.3.0" }, "engines": { - "node": ">=12" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@solana/rpc-spec-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-spec-types/-/rpc-spec-types-2.3.0.tgz", + "integrity": "sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==", "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "peer": true, "engines": { - "node": ">=7.0.0" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@solana/rpc-subscriptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions/-/rpc-subscriptions-2.3.0.tgz", + "integrity": "sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==", "license": "MIT", + "peer": true, "dependencies": { - "delayed-stream": "~1.0.0" + "@solana/errors": "2.3.0", + "@solana/fast-stable-stringify": "2.3.0", + "@solana/functional": "2.3.0", + "@solana/promises": "2.3.0", + "@solana/rpc-spec-types": "2.3.0", + "@solana/rpc-subscriptions-api": "2.3.0", + "@solana/rpc-subscriptions-channel-websocket": "2.3.0", + "@solana/rpc-subscriptions-spec": "2.3.0", + "@solana/rpc-transformers": "2.3.0", + "@solana/rpc-types": "2.3.0", + "@solana/subscribable": "2.3.0" }, "engines": { - "node": ">= 0.8" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", + "node_modules/@solana/rpc-subscriptions-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-api/-/rpc-subscriptions-api-2.3.0.tgz", + "integrity": "sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==", "license": "MIT", + "peer": true, "dependencies": { - "graceful-readlink": ">= 1.0.0" + "@solana/addresses": "2.3.0", + "@solana/keys": "2.3.0", + "@solana/rpc-subscriptions-spec": "2.3.0", + "@solana/rpc-transformers": "2.3.0", + "@solana/rpc-types": "2.3.0", + "@solana/transaction-messages": "2.3.0", + "@solana/transactions": "2.3.0" }, "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" + "node": ">=20.18.0" }, - "engines": { - "node": ">=0.8" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "node_modules/@solana/rpc-subscriptions-channel-websocket": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-channel-websocket/-/rpc-subscriptions-channel-websocket-2.3.0.tgz", + "integrity": "sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==", "license": "MIT", + "peer": true, "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "@solana/errors": "2.3.0", + "@solana/functional": "2.3.0", + "@solana/rpc-subscriptions-spec": "2.3.0", + "@solana/subscribable": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3", + "ws": "^8.18.0" } }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/@solana/rpc-subscriptions-spec": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-subscriptions-spec/-/rpc-subscriptions-spec-2.3.0.tgz", + "integrity": "sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==", "license": "MIT", + "peer": true, "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "@solana/errors": "2.3.0", + "@solana/promises": "2.3.0", + "@solana/rpc-spec-types": "2.3.0", + "@solana/subscribable": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/cross-fetch": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", - "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "node_modules/@solana/rpc-transformers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-transformers/-/rpc-transformers-2.3.0.tgz", + "integrity": "sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==", "license": "MIT", + "peer": true, "dependencies": { - "node-fetch": "^2.7.0" + "@solana/errors": "2.3.0", + "@solana/functional": "2.3.0", + "@solana/nominal-types": "2.3.0", + "@solana/rpc-spec-types": "2.3.0", + "@solana/rpc-types": "2.3.0" + }, + "engines": { + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "node_modules/@solana/rpc-transport-http": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-transport-http/-/rpc-transport-http-2.3.0.tgz", + "integrity": "sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==", "license": "MIT", + "peer": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@solana/errors": "2.3.0", + "@solana/rpc-spec": "2.3.0", + "@solana/rpc-spec-types": "2.3.0", + "undici-types": "^7.11.0" }, "engines": { - "node": ">= 8" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + }, + "node_modules/@solana/rpc-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/rpc-types/-/rpc-types-2.3.0.tgz", + "integrity": "sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==", "license": "MIT", + "peer": true, "dependencies": { - "ms": "^2.1.3" + "@solana/addresses": "2.3.0", + "@solana/codecs-core": "2.3.0", + "@solana/codecs-numbers": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/nominal-types": "2.3.0" }, "engines": { - "node": ">=6.0" + "node": ">=20.18.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, + "node_modules/@solana/signers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/signers/-/signers-2.3.0.tgz", + "integrity": "sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==", "license": "MIT", + "peer": true, + "dependencies": { + "@solana/addresses": "2.3.0", + "@solana/codecs-core": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/instructions": "2.3.0", + "@solana/keys": "2.3.0", + "@solana/nominal-types": "2.3.0", + "@solana/transaction-messages": "2.3.0", + "@solana/transactions": "2.3.0" + }, "engines": { - "node": ">=10" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/@solana/subscribable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/subscribable/-/subscribable-2.3.0.tgz", + "integrity": "sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==", "license": "MIT", + "peer": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "@solana/errors": "2.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/@solana/sysvars": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/sysvars/-/sysvars-2.3.0.tgz", + "integrity": "sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==", "license": "MIT", + "peer": true, "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "@solana/accounts": "2.3.0", + "@solana/codecs": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/rpc-types": "2.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20.18.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/@solana/transaction-confirmation": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/transaction-confirmation/-/transaction-confirmation-2.3.0.tgz", + "integrity": "sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==", "license": "MIT", + "peer": true, + "dependencies": { + "@solana/addresses": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/keys": "2.3.0", + "@solana/promises": "2.3.0", + "@solana/rpc": "2.3.0", + "@solana/rpc-subscriptions": "2.3.0", + "@solana/rpc-types": "2.3.0", + "@solana/transaction-messages": "2.3.0", + "@solana/transactions": "2.3.0" + }, "engines": { - "node": ">=0.4.0" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, + "node_modules/@solana/transaction-messages": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/transaction-messages/-/transaction-messages-2.3.0.tgz", + "integrity": "sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==", "license": "MIT", + "peer": true, + "dependencies": { + "@solana/addresses": "2.3.0", + "@solana/codecs-core": "2.3.0", + "@solana/codecs-data-structures": "2.3.0", + "@solana/codecs-numbers": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/functional": "2.3.0", + "@solana/instructions": "2.3.0", + "@solana/nominal-types": "2.3.0", + "@solana/rpc-types": "2.3.0" + }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/dogecoind-rpc": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/dogecoind-rpc/-/dogecoind-rpc-0.8.1.tgz", - "integrity": "sha512-TQH+4Eeo2SfwulJDKzRq4/OoDV+MQgZpDjvsGQ1ryBmW3bs9UfjKRdWdGKajkaQCCgSDwGc0TcAKIvROvez7ZA==", - "license": "MIT" - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/@solana/transactions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/transactions/-/transactions-2.3.0.tgz", + "integrity": "sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==", "license": "MIT", + "peer": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "@solana/addresses": "2.3.0", + "@solana/codecs-core": "2.3.0", + "@solana/codecs-data-structures": "2.3.0", + "@solana/codecs-numbers": "2.3.0", + "@solana/codecs-strings": "2.3.0", + "@solana/errors": "2.3.0", + "@solana/functional": "2.3.0", + "@solana/instructions": "2.3.0", + "@solana/keys": "2.3.0", + "@solana/nominal-types": "2.3.0", + "@solana/rpc-types": "2.3.0", + "@solana/transaction-messages": "2.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, "license": "MIT" }, - "node_modules/ecpair": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ecpair/-/ecpair-2.1.0.tgz", - "integrity": "sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==", + "node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "license": "MIT", "dependencies": { - "randombytes": "^2.1.0", - "typeforce": "^1.18.0", - "wif": "^2.0.6" - }, - "engines": { - "node": ">=8.0.0" + "undici-types": "~6.19.2" } }, - "node_modules/ed25519-hd-key": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ed25519-hd-key/-/ed25519-hd-key-1.3.0.tgz", - "integrity": "sha512-IWwAyiiuJQhgu3L8NaHb68eJxTu2pgCwxIBdgpLJdKpYZM46+AXePSVTr7fkNKaUOfOL4IrjEUaQvyVRIDP7fg==", - "license": "MIT", - "dependencies": { - "create-hmac": "1.1.7", - "tweetnacl": "1.0.3" - } + "node_modules/@types/node/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "node_modules/@types/request": { + "version": "2.48.10", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.10.tgz", + "integrity": "sha512-18CiR2ITJ1ea8/lQyHaCC2M3ypv76lK4egpUY2ve03kq/lU+xQmPp2H4N5BKVHGQuDm2uqb1IC6Fqv8eYp4wng==", "license": "MIT", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "license": "MIT" }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, + "node_modules/@types/ws": { + "version": "8.5.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.7.tgz", + "integrity": "sha512-6UrLjiDUvn40CMrAubXuIVtj2PEfKDffJS7ychvnPU44j+KVeXmdHHTgqcM/dxLUTHxlXHiFM8Skmb8ozGdTnQ==", "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" + "@types/node": "*" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node": ">=0.3.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "peer": true }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "debug": "4" }, "engines": { - "node": ">= 0.4" + "node": ">= 6.0.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" + "string-width": "^4.1.0" } }, - "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/ethers": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", - "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", - "peer": true, - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" - }, "engines": { - "node": ">=14.0.0" + "node": ">=6" } }, - "node_modules/ethers/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" + "dependencies": { + "type-fest": "^0.21.3" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", - "peer": true - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", - "license": "CC0-1.0", - "peer": true + "engines": { + "node": ">=8" + } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", - "engines": { - "node": ">=12.0.0" + "dependencies": { + "color-convert": "^2.0.1" }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "to-regex-range": "^5.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } + "license": "Python-2.0" }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", + "peer": true, "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">=8" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "license": "MIT" + }, + "node_modules/asyncjs-util": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/asyncjs-util/-/asyncjs-util-1.2.12.tgz", + "integrity": "sha512-ZuiV9aMltl2Db9AB+4h0esHOc642ktBivOhyV3ZHQ4nHwSPH7KiLIxiPTubO4cyx6aJ1Cb5ASJVHUiTk+6DVQQ==", "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" + "async": "3.2.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4717,941 +2424,1040 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, + "license": "MIT" + }, + "node_modules/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT" + }, + "node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", + "node_modules/bip174": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.1.tgz", + "integrity": "sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.0.0" } }, - "node_modules/form-data": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", - "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "node_modules/bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" + "safe-buffer": "^5.0.1" } }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true, + "node_modules/bitcoin-ops": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", + "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==", "license": "MIT" }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, + "node_modules/bitcoind-rpc": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/bitcoind-rpc/-/bitcoind-rpc-0.9.1.tgz", + "integrity": "sha512-fWjepYe3I6W8pw8WiDUrHAMKZXyRqtm6HfcUaDeLAQLr1KoKcVzqR4xzdJFJgUMBShNmN4GRMg0rLFr6ZKGZ6A==", + "license": "MIT" + }, + "node_modules/bitcoinjs-lib": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz", + "integrity": "sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==", "license": "MIT", - "peer": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.1", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, + "node_modules/bolt07": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.8.4.tgz", + "integrity": "sha512-UyZRSYmVE8K++Jg1BiJrUkxQak03aS/s7ESKDsBdBPzaTlk2E09Y0JYa9HhWN7MRn48Y2K1doOzkb1Hn6XixZw==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "dependencies": { + "bn.js": "5.2.1" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/bolt07/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/bolt09": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-2.0.0.tgz", + "integrity": "sha512-QtQiDx/nLMMwj+eaJ2tl2UoMa/8K2d8TfRVznHL0DP3cE/bYl4dPueQvSjqej9FVj+iMtrkpkIE5InuodpHmpg==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=18" } }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "balanced-match": "^1.0.0" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "fill-range": "^7.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "base-x": "^4.0.0" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/bs58check": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", + "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@noble/hashes": "^1.2.0", + "bs58": "^5.0.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, - "license": "ISC" - }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", "license": "MIT" }, - "node_modules/hardhat": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.0.tgz", - "integrity": "sha512-A3yBISI18EcnY2IR7Ny2xZF33Q3qH01yrWapeWbyGOiJm/386SasWjbHRHYgUlZ3YWJETIMh7wYfMUaXrofTDQ==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c8": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", + "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", + "dev": true, + "license": "ISC", "dependencies": { - "@ethereumjs/util": "^9.1.0", - "@ethersproject/abi": "^5.1.2", - "@nomicfoundation/edr": "0.12.0-next.17", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chokidar": "^4.0.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", + "@bcoe/v8-coverage": "^1.0.1", + "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "json-stream-stringify": "^3.1.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "micro-eth-signer": "^0.14.0", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "picocolors": "^1.1.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.8.26", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tinyglobby": "^0.2.6", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^7.0.1", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" }, "bin": { - "hardhat": "internal/cli/bootstrap.js" + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=18" }, "peerDependencies": { - "ts-node": "*", - "typescript": "*" + "monocart-coverage-reports": "^2" }, "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { + "monocart-coverage-reports": { "optional": true } } }, - "node_modules/hardhat/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/c8/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/hardhat/node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=6 <7 || >=8" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } - }, - "node_modules/hardhat/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + }, + "node_modules/c8/node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "brace-expansion": "^2.0.2" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/c8/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "license": "ISC" }, - "node_modules/hardhat/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/c8/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hardhat/node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "node_modules/c8/node_modules/test-exclude": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", + "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^10.2.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=18" } }, - "node_modules/hardhat/node_modules/mocha/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", - "engines": { - "node": ">=8.6" + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">= 0.4" } }, - "node_modules/hardhat/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": ">=8.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=12.19" } }, - "node_modules/hardhat/node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "node_modules/chai": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", + "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "engines": { + "node": ">=18" + } }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.3.0" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/hardhat/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.10" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/hash-base": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", - "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.1" + "delayed-stream": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/hash-base/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, "license": "MIT" }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" } }, - "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, - "node_modules/hash-base/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", - "bin": { - "he": "bin/he" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, "engines": { "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dogecoind-rpc": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/dogecoind-rpc/-/dogecoind-rpc-0.8.1.tgz", + "integrity": "sha512-TQH+4Eeo2SfwulJDKzRq4/OoDV+MQgZpDjvsGQ1ryBmW3bs9UfjKRdWdGKajkaQCCgSDwGc0TcAKIvROvez7ZA==", + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, + "license": "MIT" + }, + "node_modules/ecpair": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ecpair/-/ecpair-2.1.0.tgz", + "integrity": "sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "randombytes": "^2.1.0", + "typeforce": "^1.18.0", + "wif": "^2.0.6" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/immer": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", - "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/info": { - "version": "0.0.6-beta.0", - "resolved": "https://registry.npmjs.org/info/-/info-0.0.6-beta.0.tgz", - "integrity": "sha512-pm7sdQ6y6iP6ATfDUA7xGJtSvKDFlD1STRBu+3E2qbsRKRQpvkqf7UIfcVm0LpQsG1lrzJuBBkGD8TeoTjLPuQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "ISC", - "dependencies": { - "zen-observable": "^0.8.14" - }, - "peerDependencies": { - "react": "16.8", - "react-dom": "16.8" + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/invoices": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/invoices/-/invoices-3.0.0.tgz", - "integrity": "sha512-/WDTkfU2RMelQpQ54BwZssqGXYNWbPnWkZ/9QV57vAvD3RLdCDbhDuucOGti8CK3sgk8nmhRV6V0WfMrxojMmA==", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { - "bech32": "2.0.0", - "bitcoinjs-lib": "6.1.3", - "bn.js": "5.2.1", - "bolt07": "1.8.4", - "bolt09": "1.0.0", - "tiny-secp256k1": "2.2.2" + "es-errors": "^1.3.0" }, "engines": { - "node": ">=16" + "node": ">= 0.4" } }, - "node_modules/invoices/node_modules/bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" } }, - "node_modules/invoices/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/invoices/node_modules/bolt09": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-1.0.0.tgz", - "integrity": "sha512-J8wh6mRTNnYJuC43iSJRvM2Te0RtO4+Cn0JCgF6q2xWXKWjZjdPV5AGamD8R8C39/Ei6L0I780aFvIZu+bATWw==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/invoices/node_modules/tiny-secp256k1": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.2.tgz", - "integrity": "sha512-KP3eqslmiUH9jxhyQuLY+GqI4wt1EiHWNHHqKVUxCZV41+MT+esucaK4mb6Ji0vKWVKBffJ6tlxU83Pq5TIUwg==", + "node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "uint8array-tools": "0.0.7" + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "license": "MIT", - "dependencies": { - "fp-ts": "^1.0.0" + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastestsmallesttextencoderdecoder": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", + "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", + "license": "CC0-1.0", + "peer": true + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -5660,783 +3466,914 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, + "license": "ISC", "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.12" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "peerDependencies": { - "ws": "*" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { - "node": ">=10" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT", - "peer": true + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "node_modules/hardhat": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.0.tgz", + "integrity": "sha512-A3yBISI18EcnY2IR7Ny2xZF33Q3qH01yrWapeWbyGOiJm/386SasWjbHRHYgUlZ3YWJETIMh7wYfMUaXrofTDQ==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "@ethereumjs/util": "^9.1.0", + "@ethersproject/abi": "^5.1.2", + "@nomicfoundation/edr": "0.12.0-next.17", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/hardhat/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "node_modules/json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "node_modules/hardhat/node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=7.10.1" + "node": ">=6 <7 || >=8" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "node_modules/hardhat/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", - "peer": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "node_modules/hardhat/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "hasInstallScript": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=10" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/hardhat/node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lightning": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.0.1.tgz", - "integrity": "sha512-owx4iITSSx8etSiSmTY5N2oUE42ZvrrjDAXpBgIO3PSBI0ke0oRnLiP2dXHREScvebYzlKoSVtGzxXhl3/2Jmg==", - "license": "MIT", "dependencies": { - "@grpc/grpc-js": "1.9.5", - "@grpc/proto-loader": "0.7.10", - "@types/node": "20.8.4", - "@types/request": "2.48.10", - "@types/ws": "8.5.7", - "async": "3.2.4", - "asyncjs-util": "1.2.12", - "bitcoinjs-lib": "6.1.5", - "bn.js": "5.2.1", - "bolt07": "1.8.4", - "bolt09": "2.0.0", - "ecpair": "2.1.0", - "invoices": "3.0.0", - "psbt": "3.0.0", - "tiny-secp256k1": "2.2.3", - "type-fest": "4.4.0" + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" }, "engines": { - "node": ">=18" + "node": ">= 14.0.0" } }, - "node_modules/lightning/node_modules/@types/node": { - "version": "20.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", - "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", + "node_modules/hardhat/node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.25.1" - } - }, - "node_modules/lightning/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" - }, - "node_modules/lightning/node_modules/type-fest": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", - "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", - "license": "(MIT OR CC0-1.0)", + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=16" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/lightning/node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/hardhat/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, "engines": { - "node": ">=10" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "node_modules/hardhat/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", - "peer": true + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/hardhat/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "node_modules/hardhat/node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, - "license": "MIT" + "license": "Apache-2.0" }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/hardhat/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "node_modules/hardhat/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.10.0" + "node": ">=10" } }, - "node_modules/micro-eth-signer": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", - "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "micro-packed": "~0.7.2" + "engines": { + "node": ">=8" } }, - "node_modules/micro-eth-signer/node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "dev": true, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.7.2" + "es-define-property": "^1.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micro-eth-signer/node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "dev": true, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micro-packed": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", - "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", - "dev": true, + "node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "license": "MIT", "dependencies": { - "@scure/base": "~1.2.5" + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 0.8" } }, - "node_modules/micro-packed/node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "dev": true, + "node_modules/hash-base/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hash-base/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } }, - "node_modules/minimalistic-crypto-utils": { + "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "license": "MIT" + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^5.0.5" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/minimatch/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": "18 || 20 || >=22" + "node": ">= 6" } }, - "node_modules/minimatch/node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=0.10.0" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", "dev": true, "license": "MIT", "peer": true, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "obliterator": "^2.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, - "node_modules/nan": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.27.0.tgz", - "integrity": "sha512-hC+0LidcL3XE4rp1C4H54KujgXKzbfyTngZTwBByQxsOxCEKZT0MPQ4hOKUH2jU1OYstqdDH4onyHPDzcV0XdQ==", - "license": "MIT" - }, - "node_modules/ndjson": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", - "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, + "node_modules/invoices": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/invoices/-/invoices-3.0.0.tgz", + "integrity": "sha512-/WDTkfU2RMelQpQ54BwZssqGXYNWbPnWkZ/9QV57vAvD3RLdCDbhDuucOGti8CK3sgk8nmhRV6V0WfMrxojMmA==", + "license": "MIT", "dependencies": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.5", - "readable-stream": "^3.6.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "bech32": "2.0.0", + "bitcoinjs-lib": "6.1.3", + "bn.js": "5.2.1", + "bolt07": "1.8.4", + "bolt09": "1.0.0", + "tiny-secp256k1": "2.2.2" }, - "bin": { - "ndjson": "cli.js" + "engines": { + "node": ">=16" + } + }, + "node_modules/invoices/node_modules/bitcoinjs-lib": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", + "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.0", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true, + "node_modules/invoices/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "license": "MIT" }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/invoices/node_modules/bolt09": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-1.0.0.tgz", + "integrity": "sha512-J8wh6mRTNnYJuC43iSJRvM2Te0RtO4+Cn0JCgF6q2xWXKWjZjdPV5AGamD8R8C39/Ei6L0I780aFvIZu+bATWw==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/invoices/node_modules/tiny-secp256k1": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.2.tgz", + "integrity": "sha512-KP3eqslmiUH9jxhyQuLY+GqI4wt1EiHWNHHqKVUxCZV41+MT+esucaK4mb6Ji0vKWVKBffJ6tlxU83Pq5TIUwg==", "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "uint8array-tools": "0.0.7" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=14.0.0" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" }, - "peerDependencies": { - "encoding": "^0.1.0" + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, "engines": { - "node": ">=12.19" + "node": ">=0.10.0" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -6445,86 +4382,65 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/obliterator": { + "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", - "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "dev": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } + "license": "ISC" }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "yocto-queue": "^0.1.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "semver": "^7.5.3" }, "engines": { "node": ">=10" @@ -6533,1669 +4449,1551 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", "dev": true, "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=7.10.1" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/promptly": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-0.2.0.tgz", - "integrity": "sha512-HG+4CGfxDIcto6WSwa8CNSMxgRYrjOgGbh0JSr3F4yy5aK95qJANaTnRq+U1g/J2h6IIgLD+qRPzDR4AnUh/1g==", + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "read": "~1.0.4" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 6" + "node": ">=10.0.0" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, "engines": { - "node": ">=12.0.0" + "node": ">=6" } }, - "node_modules/psbt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/psbt/-/psbt-3.0.0.tgz", - "integrity": "sha512-Gg35WfXAdbVqION9AJ4cO7cdgqR2iL1Dyq00AmvKCosTbm7EQrrMmHGjkWACb7ue9+aaHjMi/UdDG1SZwqA6bg==", + "node_modules/lightning": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.0.1.tgz", + "integrity": "sha512-owx4iITSSx8etSiSmTY5N2oUE42ZvrrjDAXpBgIO3PSBI0ke0oRnLiP2dXHREScvebYzlKoSVtGzxXhl3/2Jmg==", "license": "MIT", "dependencies": { - "bip66": "1.1.5", - "bitcoin-ops": "1.4.1", - "bitcoinjs-lib": "6.1.3", + "@grpc/grpc-js": "1.9.5", + "@grpc/proto-loader": "0.7.10", + "@types/node": "20.8.4", + "@types/request": "2.48.10", + "@types/ws": "8.5.7", + "async": "3.2.4", + "asyncjs-util": "1.2.12", + "bitcoinjs-lib": "6.1.5", "bn.js": "5.2.1", - "pushdata-bitcoin": "1.0.1", - "varuint-bitcoin": "1.1.2" + "bolt07": "1.8.4", + "bolt09": "2.0.0", + "ecpair": "2.1.0", + "invoices": "3.0.0", + "psbt": "3.0.0", + "tiny-secp256k1": "2.2.3", + "type-fest": "4.4.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/psbt/node_modules/bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", + "node_modules/lightning/node_modules/@types/node": { + "version": "20.8.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", + "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", "license": "MIT", "dependencies": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" + "undici-types": "~5.25.1" } }, - "node_modules/psbt/node_modules/bn.js": { + "node_modules/lightning/node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "license": "MIT" }, - "node_modules/pushdata-bitcoin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", - "integrity": "sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==", - "license": "MIT", - "dependencies": { - "bitcoin-ops": "^1.3.0" + "node_modules/lightning/node_modules/type-fest": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", + "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/lightning/node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.0" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "node_modules/react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "license": "MIT", - "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - }, + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10.0" } }, - "node_modules/react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", + "node_modules/micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - }, - "peerDependencies": { - "react": "^16.0.0" + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "node_modules/micro-eth-signer/node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "dev": true, "license": "MIT", - "peer": true - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "license": "ISC", "dependencies": { - "mute-stream": "~0.0.4" + "@noble/hashes": "1.7.2" }, "engines": { - "node": ">=0.8" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micro-eth-signer/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@scure/base": "~1.2.5" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/micro-packed/node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, "funding": { - "type": "individual", "url": "https://paulmillr.com/funding/" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", - "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "path-parse": "^1.0.6" + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", - "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "node_modules/minimatch/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, "license": "MIT", - "dependencies": { - "hash-base": "^3.1.2", - "inherits": "^2.0.4" - }, "engines": { - "node": ">= 0.8" + "node": "18 || 20 || >=22" } }, - "node_modules/ripple-address-codec": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ripple-address-codec/-/ripple-address-codec-4.3.1.tgz", - "integrity": "sha512-Qa3+9wKVvpL/xYtT6+wANsn0A1QcC5CT6IMZbRJZ/1lGt7gmwIfsrCuz1X0+LCEO7zgb+3UT1I1dc0k/5dwKQQ==", - "license": "ISC", + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", "dependencies": { - "base-x": "^3.0.9", - "create-hash": "^1.1.2" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">= 10" + "node": "18 || 20 || >=22" } }, - "node_modules/ripple-address-codec/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ripple-binary-codec": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-1.11.0.tgz", - "integrity": "sha512-g7+gs3T+NfoeW6vIq5dcN0CkIT4t/zwRzFxz8X2RzfbrWRnewPUKqQbmBgs05tXLX5NuWPaneiaAVpFpYBcdfw==", - "license": "ISC", - "dependencies": { - "assert": "^2.0.0", - "big-integer": "^1.6.48", - "buffer": "6.0.3", - "create-hash": "^1.2.0", - "decimal.js": "^10.2.0", - "ripple-address-codec": "^4.3.1" - }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/ripple-keypairs": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-1.3.1.tgz", - "integrity": "sha512-dmPlraWKJciFJxHcoubDahGnoIalG5e/BtV6HNDUs7wLXmtnLMHt6w4ed9R8MTL2zNrVPiIdI/HCtMMo0Tm7JQ==", - "license": "ISC", + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.1.1", - "brorand": "^1.0.5", - "elliptic": "^6.5.4", - "hash.js": "^1.0.3", - "ripple-address-codec": "^4.3.1" - }, - "engines": { - "node": ">= 10" + "obliterator": "^2.0.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "license": "MIT", + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/ndjson": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", + "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "ndjson": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", "dev": true, "license": "MIT" }, - "node_modules/scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "engines": { + "node": ">=12.19" } }, - "node_modules/scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "dev": true, "license": "MIT" }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "wrappy": "1" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "license": "(MIT AND BSD-3-Clause)", + "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" + "p-limit": "^3.0.2" }, "engines": { - "node": ">= 0.10" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/sinon": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz", - "integrity": "sha512-TOgRcwFPbfGtpqvZw+hyqJDvqfapr1qUlOizROIk4bBLjlsjlB00Pg6wMFXNtJRpu+eCZuVOaLatG7M8105kAw==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.5", - "@sinonjs/samsam": "^8.0.1", - "diff": "^7.0.0", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/solc": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", - "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", - "dev": true, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "license": "MIT", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" } }, - "node_modules/solc/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promptly": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promptly/-/promptly-0.2.0.tgz", + "integrity": "sha512-HG+4CGfxDIcto6WSwa8CNSMxgRYrjOgGbh0JSr3F4yy5aK95qJANaTnRq+U1g/J2h6IIgLD+qRPzDR4AnUh/1g==", "license": "MIT", - "engines": { - "node": ">= 12" + "dependencies": { + "read": "~1.0.4" } }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "license": "MIT", + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/psbt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/psbt/-/psbt-3.0.0.tgz", + "integrity": "sha512-Gg35WfXAdbVqION9AJ4cO7cdgqR2iL1Dyq00AmvKCosTbm7EQrrMmHGjkWACb7ue9+aaHjMi/UdDG1SZwqA6bg==", + "license": "MIT", + "dependencies": { + "bip66": "1.1.5", + "bitcoin-ops": "1.4.1", + "bitcoinjs-lib": "6.1.3", + "bn.js": "5.2.1", + "pushdata-bitcoin": "1.0.1", + "varuint-bitcoin": "1.1.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=16" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, + "node_modules/psbt/node_modules/bitcoinjs-lib": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", + "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.0", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "readable-stream": "^3.0.0" - } + "node_modules/psbt/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" }, - "node_modules/stacktrace-parser": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", - "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", - "dev": true, + "node_modules/pushdata-bitcoin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", + "integrity": "sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==", "license": "MIT", "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" + "bitcoin-ops": "^1.3.0" } }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, "engines": { "node": ">= 0.8" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "license": "ISC", "dependencies": { - "safe-buffer": "~5.2.0" + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "peer": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "path-parse": "^1.0.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "hash-base": "^3.1.2", + "inherits": "^2.0.4" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "license": "MIT", - "peer": true, + "license": "BSD-3-Clause", "dependencies": { - "readable-stream": "3" + "randombytes": "^2.1.0" } }, - "node_modules/tiny-secp256k1": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz", - "integrity": "sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==", + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "license": "MIT", "dependencies": { - "uint8array-tools": "0.0.7" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.4" } }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" }, "engines": { - "node": ">=12.0.0" + "node": ">= 0.10" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { - "os-tmpdir": "~1.0.2" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=8" } }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/sinon": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz", + "integrity": "sha512-TOgRcwFPbfGtpqvZw+hyqJDvqfapr1qUlOizROIk4bBLjlsjlB00Pg6wMFXNtJRpu+eCZuVOaLatG7M8105kAw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "is-number": "^7.0.0" + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.5", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "supports-color": "^7.2.0" }, - "engines": { - "node": ">=8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "license": "0BSD" - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "license": "Unlicense" + "peer": true }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==", - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "peer": true, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "solcjs": "solc.js" }, "engines": { - "node": ">=14.17" - } - }, - "node_modules/uint8array-tools": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.7.tgz", - "integrity": "sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" + "node": ">=10.0.0" } }, - "node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "node_modules/solc/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, "engines": { - "node": ">=14.0" + "node": ">= 12" } }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.8" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "node": ">=0.10.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" + "readable-stream": "^3.0.0" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", "dev": true, - "license": "MIT" - }, - "node_modules/varuint-bitcoin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", - "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/web3": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-4.16.0.tgz", - "integrity": "sha512-SgoMSBo6EsJ5GFCGar2E/pR2lcR/xmUSuQ61iK6yDqzxmm42aPPxSqZfJz2z/UCR6pk03u77pU8TGV6lgMDdIQ==", - "license": "LGPL-3.0", - "dependencies": { - "web3-core": "^4.7.1", - "web3-errors": "^1.3.1", - "web3-eth": "^4.11.1", - "web3-eth-abi": "^4.4.1", - "web3-eth-accounts": "^4.3.1", - "web3-eth-contract": "^4.7.2", - "web3-eth-ens": "^4.4.0", - "web3-eth-iban": "^4.0.7", - "web3-eth-personal": "^4.1.0", - "web3-net": "^4.1.0", - "web3-providers-http": "^4.2.0", - "web3-providers-ws": "^4.0.8", - "web3-rpc-methods": "^1.3.0", - "web3-rpc-providers": "^1.0.0-rc.4", - "web3-types": "^1.10.0", - "web3-utils": "^4.3.3", - "web3-validator": "^2.0.6" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=6.12.0" - } - }, - "node_modules/web3-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.7.1.tgz", - "integrity": "sha512-9KSeASCb/y6BG7rwhgtYC4CvYY66JfkmGNEYb7q1xgjt9BWfkf09MJPaRyoyT5trdOxYDHkT9tDlypvQWaU8UQ==", - "license": "LGPL-3.0", - "dependencies": { - "web3-errors": "^1.3.1", - "web3-eth-accounts": "^4.3.1", - "web3-eth-iban": "^4.0.7", - "web3-providers-http": "^4.2.0", - "web3-providers-ws": "^4.0.8", - "web3-types": "^1.10.0", - "web3-utils": "^4.3.3", - "web3-validator": "^2.0.6" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "type-fest": "^0.7.1" }, - "optionalDependencies": { - "web3-providers-ipc": "^4.0.7" + "engines": { + "node": ">=6" } }, - "node_modules/web3-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.1.tgz", - "integrity": "sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==", - "license": "LGPL-3.0", - "dependencies": { - "web3-types": "^1.10.0" - }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=8" } }, - "node_modules/web3-eth": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-4.11.1.tgz", - "integrity": "sha512-q9zOkzHnbLv44mwgLjLXuyqszHuUgZWsQayD2i/rus2uk0G7hMn11bE2Q3hOVnJS4ws4VCtUznlMxwKQ+38V2w==", - "license": "LGPL-3.0", - "dependencies": { - "setimmediate": "^1.0.5", - "web3-core": "^4.7.1", - "web3-errors": "^1.3.1", - "web3-eth-abi": "^4.4.1", - "web3-eth-accounts": "^4.3.1", - "web3-net": "^4.1.0", - "web3-providers-ws": "^4.0.8", - "web3-rpc-methods": "^1.3.0", - "web3-types": "^1.10.0", - "web3-utils": "^4.3.3", - "web3-validator": "^2.0.6" - }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">= 0.8" } }, - "node_modules/web3-eth-abi": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz", - "integrity": "sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==", - "license": "LGPL-3.0", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", "dependencies": { - "abitype": "0.7.1", - "web3-errors": "^1.3.1", - "web3-types": "^1.10.0", - "web3-utils": "^4.3.3", - "web3-validator": "^2.0.6" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/web3-eth-accounts": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.3.1.tgz", - "integrity": "sha512-rTXf+H9OKze6lxi7WMMOF1/2cZvJb2AOnbNQxPhBDssKOllAMzLhg1FbZ4Mf3lWecWfN6luWgRhaeSqO1l+IBQ==", - "license": "LGPL-3.0", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "crc-32": "^1.2.2", - "ethereum-cryptography": "^2.0.0", - "web3-errors": "^1.3.1", - "web3-types": "^1.10.0", - "web3-utils": "^4.3.3", - "web3-validator": "^2.0.6" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=8" } }, - "node_modules/web3-eth-accounts/node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp" + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/web3-eth-accounts/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-eth-accounts/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=8" } }, - "node_modules/web3-eth-accounts/node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=8" } }, - "node_modules/web3-eth-accounts/node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "engines": { + "node": ">=8" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web3-eth-accounts/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/web3-eth-contract": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.7.2.tgz", - "integrity": "sha512-3ETqs2pMNPEAc7BVY/C3voOhTUeJdkf2aM3X1v+edbngJLHAxbvxKpOqrcO0cjXzC4uc2Q8Zpf8n8zT5r0eLnA==", - "license": "LGPL-3.0", - "dependencies": { - "@ethereumjs/rlp": "^5.0.2", - "web3-core": "^4.7.1", - "web3-errors": "^1.3.1", - "web3-eth": "^4.11.1", - "web3-eth-abi": "^4.4.1", - "web3-types": "^1.10.0", - "web3-utils": "^4.3.3", - "web3-validator": "^2.0.6" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=8" } }, - "node_modules/web3-eth-ens": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-4.4.0.tgz", - "integrity": "sha512-DeyVIS060hNV9g8dnTx92syqvgbvPricE3MerCxe/DquNZT3tD8aVgFfq65GATtpCgDDJffO2bVeHp3XBemnSQ==", - "license": "LGPL-3.0", + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "@adraffy/ens-normalize": "^1.8.8", - "web3-core": "^4.5.0", - "web3-errors": "^1.2.0", - "web3-eth": "^4.8.0", - "web3-eth-contract": "^4.5.0", - "web3-net": "^4.1.0", - "web3-types": "^1.7.0", - "web3-utils": "^4.3.0", - "web3-validator": "^2.0.6" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=10.0.0" } }, - "node_modules/web3-eth-iban": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", - "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", - "license": "LGPL-3.0", + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "web3-errors": "^1.1.3", - "web3-types": "^1.3.0", - "web3-utils": "^4.0.7", - "web3-validator": "^2.0.3" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "readable-stream": "3" } }, - "node_modules/web3-eth-personal": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-4.1.0.tgz", - "integrity": "sha512-RFN83uMuvA5cu1zIwwJh9A/bAj0OBxmGN3tgx19OD/9ygeUZbifOL06jgFzN0t+1ekHqm3DXYQM8UfHpXi7yDQ==", - "license": "LGPL-3.0", + "node_modules/tiny-secp256k1": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz", + "integrity": "sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==", + "license": "MIT", "dependencies": { - "web3-core": "^4.6.0", - "web3-eth": "^4.9.0", - "web3-rpc-methods": "^1.3.0", - "web3-types": "^1.8.0", - "web3-utils": "^4.3.1", - "web3-validator": "^2.0.6" + "uint8array-tools": "0.0.7" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=14.0.0" } }, - "node_modules/web3-net": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-4.1.0.tgz", - "integrity": "sha512-WWmfvHVIXWEoBDWdgKNYKN8rAy6SgluZ0abyRyXOL3ESr7ym7pKWbfP4fjApIHlYTh8tNqkrdPfM4Dyi6CA0SA==", - "license": "LGPL-3.0", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", "dependencies": { - "web3-core": "^4.4.0", - "web3-rpc-methods": "^1.3.0", - "web3-types": "^1.6.0", - "web3-utils": "^4.3.0" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, - "node_modules/web3-providers-http": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.2.0.tgz", - "integrity": "sha512-IPMnDtHB7dVwaB7/mMxAZzyq7d5ezfO1+Vw0bNfAeIi7gaDlJiggp85SdyAfOgov8AMUA/dyiY72kQ0KmjXKvQ==", - "license": "LGPL-3.0", - "dependencies": { - "cross-fetch": "^4.0.0", - "web3-errors": "^1.3.0", - "web3-types": "^1.7.0", - "web3-utils": "^4.3.1" + "node": ">=12.0.0" }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/web3-providers-ipc": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", - "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", - "license": "LGPL-3.0", - "optional": true, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", "dependencies": { - "web3-errors": "^1.1.3", - "web3-types": "^1.3.0", - "web3-utils": "^4.0.7" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=0.6.0" } }, - "node_modules/web3-providers-ws": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.8.tgz", - "integrity": "sha512-goJdgata7v4pyzHRsg9fSegUG4gVnHZSHODhNnn6J93ykHkBI1nz4fjlGpcQLUMi4jAMz6SHl9Ibzs2jj9xqPw==", - "license": "LGPL-3.0", + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "license": "MIT", "dependencies": { - "@types/ws": "8.5.3", - "isomorphic-ws": "^5.0.0", - "web3-errors": "^1.2.0", - "web3-types": "^1.7.0", - "web3-utils": "^4.3.1", - "ws": "^8.17.1" + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">= 0.4" } }, - "node_modules/web3-providers-ws/node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" - } - }, - "node_modules/web3-rpc-methods": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.3.0.tgz", - "integrity": "sha512-/CHmzGN+IYgdBOme7PdqzF+FNeMleefzqs0LVOduncSaqsppeOEoskLXb2anSpzmQAP3xZJPaTrkQPWSJMORig==", - "license": "LGPL-3.0", - "dependencies": { - "web3-core": "^4.4.0", - "web3-types": "^1.6.0", - "web3-validator": "^2.0.6" + "is-number": "^7.0.0" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=8.0" } }, - "node_modules/web3-rpc-providers": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/web3-rpc-providers/-/web3-rpc-providers-1.0.0-rc.4.tgz", - "integrity": "sha512-PXosCqHW0EADrYzgmueNHP3Y5jcSmSwH+Dkqvn7EYD0T2jcsdDAIHqk6szBiwIdhumM7gv9Raprsu/s/f7h1fw==", - "license": "LGPL-3.0", - "dependencies": { - "web3-errors": "^1.3.1", - "web3-providers-http": "^4.2.0", - "web3-providers-ws": "^4.0.8", - "web3-types": "^1.10.0", - "web3-utils": "^4.3.3", - "web3-validator": "^2.0.6" - }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=0.6" } }, - "node_modules/web3-types": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.10.0.tgz", - "integrity": "sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==", - "license": "LGPL-3.0", - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD", + "peer": true }, - "node_modules/web3-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", - "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", - "license": "LGPL-3.0", - "dependencies": { - "ethereum-cryptography": "^2.0.0", - "eventemitter3": "^5.0.1", - "web3-errors": "^1.3.1", - "web3-types": "^1.10.0", - "web3-validator": "^2.0.6" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true, + "license": "MIT" }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=4" } }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "license": "MIT", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 16" + "node": ">=10" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web3-utils/node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "license": "MIT", "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 0.4" } }, - "node_modules/web3-utils/node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "node_modules/typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=14.17" } }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "node_modules/uint8array-tools": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.7.tgz", + "integrity": "sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==", "license": "MIT", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/web3-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz", - "integrity": "sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==", - "license": "LGPL-3.0", + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "license": "MIT", "dependencies": { - "ethereum-cryptography": "^2.0.0", - "util": "^0.12.5", - "web3-errors": "^1.2.0", - "web3-types": "^1.6.0", - "zod": "^3.21.4" + "@fastify/busboy": "^2.0.0" }, "engines": { - "node": ">=14", - "npm": ">=6.12.0" + "node": ">=14.0" } }, - "node_modules/web3-validator/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "peer": true }, - "node_modules/web3-validator/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">= 10.0.0" } }, - "node_modules/web3-validator/node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 0.8" } }, - "node_modules/web3-validator/node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/web3-validator/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "license": "MIT", + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/varuint-bitcoin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "safe-buffer": "^5.1.1" } }, "node_modules/which": { @@ -8334,6 +6132,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -8350,74 +6149,6 @@ } } }, - "node_modules/xrpl": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-2.13.0.tgz", - "integrity": "sha512-jIu9PuG3g+2NZQT8oGmOL3LFkH6Pp+OHS1FNbozEJkajuHAuoCEe2vVddjD8ME81kgV+xRFnXJ+EUbmQDdh/Xg==", - "license": "ISC", - "dependencies": { - "bignumber.js": "^9.0.0", - "bip32": "^2.0.6", - "bip39": "^3.0.4", - "https-proxy-agent": "^5.0.0", - "lodash": "^4.17.4", - "ripple-address-codec": "^4.3.1", - "ripple-binary-codec": "^1.10.0", - "ripple-keypairs": "^1.3.1", - "ws": "^8.2.2", - "xrpl-secret-numbers": "^0.3.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/xrpl-secret-numbers": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/xrpl-secret-numbers/-/xrpl-secret-numbers-0.3.5.tgz", - "integrity": "sha512-5W2Ijp4nFpplEJ4IEK8JNAnRN9+3/+8BdBQ0hOZ3bZfa/+K9c9GNdN5fHDkKoECJN3nzXNcj6/Ejg7wUQDtRnQ==", - "license": "MIT", - "dependencies": { - "@types/brorand": "^1.0.30", - "brorand": "^1.1.0", - "ripple-keypairs": "^2.0.0" - } - }, - "node_modules/xrpl-secret-numbers/node_modules/@scure/base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-2.2.0.tgz", - "integrity": "sha512-b8XEupJibegiXV+tDUseI8oLQc8ei3d/4Jkb2RpbHh3MfE054ov3uIz2dhFkB3FI8iwYkEh0gGCApkrYggkPNg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/xrpl-secret-numbers/node_modules/ripple-address-codec": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ripple-address-codec/-/ripple-address-codec-5.0.1.tgz", - "integrity": "sha512-JQHLKuVJV8lv9Qobmn4aUM2Dpv9WRRLKnNWfM8tN02fAbUtG8mUPsu9q9UYX8P76G4qzytEc5ZKMp/3JggNYmw==", - "license": "ISC", - "dependencies": { - "@scure/base": "^2.0.0", - "@xrplf/isomorphic": "^1.0.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/xrpl-secret-numbers/node_modules/ripple-keypairs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-2.0.0.tgz", - "integrity": "sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==", - "license": "ISC", - "dependencies": { - "@noble/curves": "^1.0.0", - "@xrplf/isomorphic": "^1.0.0", - "ripple-address-codec": "^5.0.0" - }, - "engines": { - "node": ">= 16" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -8482,21 +6213,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zen-observable": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", - "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==", - "license": "MIT" - }, - "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } } } } From 91dccc377479cce807db6fc59cf2152d7112cbce Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Tue, 28 Jul 2026 09:43:44 -0400 Subject: [PATCH 02/17] add lavamoat config to bitcore package package.jsons --- packages/bitcore-build/package.json | 14 ++++++++++++- packages/bitcore-cli/package.json | 15 +++++++++++++- packages/bitcore-lib-cash/package.json | 15 +++++++++++++- packages/bitcore-lib-doge/package.json | 15 +++++++++++++- packages/bitcore-lib-ltc/package.json | 15 +++++++++++++- packages/bitcore-lib/package.json | 15 +++++++++++++- packages/bitcore-mnemonic/package.json | 15 +++++++++++++- packages/bitcore-node/package.json | 21 +++++++++++++++++++- packages/bitcore-p2p-cash/package.json | 16 ++++++++++++++- packages/bitcore-p2p-doge/package.json | 16 ++++++++++++++- packages/bitcore-p2p/package.json | 16 ++++++++++++++- packages/bitcore-tss/package.json | 14 +++++++++++++ packages/bitcore-wallet-client/package.json | 14 ++++++++++++- packages/bitcore-wallet-service/package.json | 11 +++++++++- packages/crypto-rpc/package.json | 7 +++++++ packages/crypto-wallet-core/package.json | 7 ++++++- 16 files changed, 212 insertions(+), 14 deletions(-) diff --git a/packages/bitcore-build/package.json b/packages/bitcore-build/package.json index 4687bb96246..c1526328160 100644 --- a/packages/bitcore-build/package.json +++ b/packages/bitcore-build/package.json @@ -61,5 +61,17 @@ "lodash": "^4.17.15", "webdriverio": "^9.12.0" }, - "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1" + "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", + "lavamoat": { + "allowScripts": { + "@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@wdio/cli>tsx>esbuild#0.25.1": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + } + } } diff --git a/packages/bitcore-cli/package.json b/packages/bitcore-cli/package.json index 14e03a2ae37..5011f5a4803 100644 --- a/packages/bitcore-cli/package.json +++ b/packages/bitcore-cli/package.json @@ -64,5 +64,18 @@ "supertest": "^7.2.2", "typescript": "^5.8.3" }, - "gitHead": "d1c7f8b0c3a2e4f5b6c7d8e9f0a1b2c3d4e5f6g7" + "gitHead": "d1c7f8b0c3a2e4f5b6c7d8e9f0a1b2c3d4e5f6g7", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@bitpay-labs/bitcore-wallet-service>moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak#3.0.4": false, + "@bitpay-labs/bitcore-wallet-service>secp256k1#4.0.3": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false + } + } } diff --git a/packages/bitcore-lib-cash/package.json b/packages/bitcore-lib-cash/package.json index c161228e6cb..79773128b7c 100644 --- a/packages/bitcore-lib-cash/package.json +++ b/packages/bitcore-lib-cash/package.json @@ -49,5 +49,18 @@ "sinon": "^7.1.1" }, "license": "MIT", - "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1" + "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + } + } } diff --git a/packages/bitcore-lib-doge/package.json b/packages/bitcore-lib-doge/package.json index 693c661d25a..5da54329ffa 100644 --- a/packages/bitcore-lib-doge/package.json +++ b/packages/bitcore-lib-doge/package.json @@ -49,5 +49,18 @@ "gulp": "^4.0.0", "sinon": "^7.1.1" }, - "license": "MIT" + "license": "MIT", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + } + } } diff --git a/packages/bitcore-lib-ltc/package.json b/packages/bitcore-lib-ltc/package.json index 93706f71db7..9d7d083dbf8 100644 --- a/packages/bitcore-lib-ltc/package.json +++ b/packages/bitcore-lib-ltc/package.json @@ -100,5 +100,18 @@ "gulp": "^4.0.0", "sinon": "^7.1.1" }, - "license": "MIT" + "license": "MIT", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + } + } } diff --git a/packages/bitcore-lib/package.json b/packages/bitcore-lib/package.json index 1491681234d..7c8575f3210 100644 --- a/packages/bitcore-lib/package.json +++ b/packages/bitcore-lib/package.json @@ -49,5 +49,18 @@ "sinon": "^7.1.1" }, "license": "MIT", - "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1" + "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + } + } } diff --git a/packages/bitcore-mnemonic/package.json b/packages/bitcore-mnemonic/package.json index a7ca075bb5a..9d157077d2b 100644 --- a/packages/bitcore-mnemonic/package.json +++ b/packages/bitcore-mnemonic/package.json @@ -43,5 +43,18 @@ "@bitpay-labs/bitcore-lib": "^11.10.4", "unorm": "^1.4.1" }, - "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1" + "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + } + } } diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index ce42069ae64..a8d0c50d7ff 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -104,5 +104,24 @@ "socket.io": "4.8.1", "source-map-support": "^0.5.13" }, - "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761" + "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@bitpay-labs/bitcore-client>bcrypt#5.1.0": true, + "@bitpay-labs/bitcore-client>leveldown#6.1.1": false, + "@bitpay-labs/bitcore-client>secp256k1#3.7.1": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@bitpay-labs/crypto-rpc>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@bitpay-labs/crypto-rpc>lightning>@grpc/proto-loader>protobufjs#7.5.4": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@metaplex-foundation/umi-bundle-defaults>@solana/web3.js>rpc-websockets>utf-8-validate#6.0.6": false, + "secp256k1#4.0.3": false, + "sinon#4.4.8": false, + "socket.io>engine.io>ws>bufferutil#4.1.0": false, + "socket.io>engine.io>ws>utf-8-validate#5.0.10": false + } + } } diff --git a/packages/bitcore-p2p-cash/package.json b/packages/bitcore-p2p-cash/package.json index 78dd62e2078..fc087c28d44 100644 --- a/packages/bitcore-p2p-cash/package.json +++ b/packages/bitcore-p2p-cash/package.json @@ -73,5 +73,19 @@ "sinon": "^1.12.2" }, "license": "MIT", - "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1" + "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>undertaker>es6-weak-map>es5-ext#0.10.64": false + } + } } diff --git a/packages/bitcore-p2p-doge/package.json b/packages/bitcore-p2p-doge/package.json index 4218db6e297..12a612138d9 100644 --- a/packages/bitcore-p2p-doge/package.json +++ b/packages/bitcore-p2p-doge/package.json @@ -30,5 +30,19 @@ "sinon": "^1.12.2" }, "license": "MIT", - "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1" + "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.13": false, + "gulp>undertaker>es6-weak-map>es5-ext#0.10.64": false + } + } } diff --git a/packages/bitcore-p2p/package.json b/packages/bitcore-p2p/package.json index d3f2f3b8c7c..0dcbb8b580d 100644 --- a/packages/bitcore-p2p/package.json +++ b/packages/bitcore-p2p/package.json @@ -30,5 +30,19 @@ "sinon": "^1.12.2" }, "license": "MIT", - "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1" + "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>glob-watcher>chokidar>fsevents#1.2.11": false, + "gulp>undertaker>es6-weak-map>es5-ext#0.10.64": false + } + } } diff --git a/packages/bitcore-tss/package.json b/packages/bitcore-tss/package.json index c4b4396ac69..d8d9c609f2f 100644 --- a/packages/bitcore-tss/package.json +++ b/packages/bitcore-tss/package.json @@ -39,5 +39,19 @@ "webdriverio": "^9.12.0", "webpack": "^5.98.0", "webpack-cli": "^6.0.1" + }, + "lavamoat": { + "allowScripts": { + "@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, + "@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, + "@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, + "@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.15.18": false, + "@wdio/browser-runner>vite>esbuild#0.21.5": false, + "@wdio/cli>@wdio/utils>edgedriver#6.3.0": false, + "@wdio/cli>@wdio/utils>geckodriver#6.1.0": false, + "@wdio/cli>tsx>esbuild#0.27.3": false + } } } diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 300a0a33e07..9013b54c1b9 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -63,5 +63,17 @@ "fix": "npm run fix:errors", "pub": "npm run build && npm publish" }, - "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761" + "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, + "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@bitpay-labs/bitcore-wallet-service>moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak#3.0.4": false, + "@bitpay-labs/bitcore-wallet-service>secp256k1#4.0.3": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false + } + } } diff --git a/packages/bitcore-wallet-service/package.json b/packages/bitcore-wallet-service/package.json index 9d006697cc1..a05e67cc573 100644 --- a/packages/bitcore-wallet-service/package.json +++ b/packages/bitcore-wallet-service/package.json @@ -107,5 +107,14 @@ "email": "kjoseph@bitpay.com" } ], - "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761" + "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761", + "lavamoat": { + "allowScripts": { + "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, + "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak#3.0.4": false, + "secp256k1#4.0.3": false + } + } } diff --git a/packages/crypto-rpc/package.json b/packages/crypto-rpc/package.json index 6230f4f3fa9..cdd611dbc84 100644 --- a/packages/crypto-rpc/package.json +++ b/packages/crypto-rpc/package.json @@ -56,5 +56,12 @@ "branches": 80, "functions": 70, "lines": 80 + }, + "lavamoat": { + "allowScripts": { + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "hardhat>keccak#3.0.4": false, + "lightning>@grpc/proto-loader>protobufjs#7.5.4": false + } } } diff --git a/packages/crypto-wallet-core/package.json b/packages/crypto-wallet-core/package.json index adeeeab9341..0eddb550b62 100644 --- a/packages/crypto-wallet-core/package.json +++ b/packages/crypto-wallet-core/package.json @@ -51,5 +51,10 @@ "chai": "5.1.2", "typescript": "5.7.3" }, - "gitHead": "e091d99915d099863ad3e78dbe867aa7780191e4" + "gitHead": "e091d99915d099863ad3e78dbe867aa7780191e4", + "lavamoat": { + "allowScripts": { + "xrpl>bip32>tiny-secp256k1#1.1.7": false + } + } } From a42105a43b630eff3bd10273b57220dfed766f2e Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Tue, 28 Jul 2026 14:08:18 -0400 Subject: [PATCH 03/17] update build job for new lavamoat flow --- .circleci/config.yml | 51 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4eafdd6ce26..20883abad37 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -100,9 +100,54 @@ jobs: nvm use default set -x && node -v && npm -v && google-chrome --version && docker version && python --version # - restore_dependency_cache - - run: | # TODO figure out how to make this only run on a cache miss in restore_dependency_cache - nvm use default - npm ci + # TODO: Run dependency installation, inert bootstrap, approved lifecycle + # scripts, and compilation only when restore_dependency_cache misses + - run: + name: Install root dependencies + command: | + nvm use default + npm ci + - run: + name: Bootstrap child dependencies without lifecycle scripts + command: | + nvm use default + npm_config_ignore_scripts=true npm run bootstrap + - run: + name: Validate and run approved dependency lifecycle scripts + command: | + nvm use default + + for package in \ + packages/bitcore-build \ + packages/bitcore-cli \ + packages/bitcore-client \ + packages/bitcore-lib \ + packages/bitcore-lib-cash \ + packages/bitcore-lib-doge \ + packages/bitcore-lib-ltc \ + packages/bitcore-logging \ + packages/bitcore-mnemonic \ + packages/bitcore-node \ + packages/bitcore-p2p \ + packages/bitcore-p2p-cash \ + packages/bitcore-p2p-doge \ + packages/bitcore-tss \ + packages/bitcore-wallet-client \ + packages/bitcore-wallet-service \ + packages/crypto-rpc \ + packages/crypto-wallet-core + do + ( + cd "$package" + ../../node_modules/.bin/allow-scripts check + ../../node_modules/.bin/allow-scripts run + ) + done + - run: + name: Compile monorepo + command: | + nvm use default + npm run compile - save_cache: key: node_modules-{{ checksum "package-lock.json" }}-{{ checksum "combined-package-lock.txt" }} paths: From f330cf8d8b90851b4ce63cc3f7916b2b57f0afa4 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Tue, 28 Jul 2026 14:24:38 -0400 Subject: [PATCH 04/17] add debugging to failing job --- .circleci/config.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 20883abad37..49da9b2e218 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -116,6 +116,7 @@ jobs: name: Validate and run approved dependency lifecycle scripts command: | nvm use default + set -euo pipefail for package in \ packages/bitcore-build \ @@ -137,9 +138,20 @@ jobs: packages/crypto-rpc \ packages/crypto-wallet-core do + echo + echo "===== Checking $package =====" + ( cd "$package" - ../../node_modules/.bin/allow-scripts check + + if ! ../../node_modules/.bin/allow-scripts check; then + echo + echo "ERROR: allow-scripts check failed for $package" + echo + ../../node_modules/.bin/allow-scripts list + exit 1 + fi + ../../node_modules/.bin/allow-scripts run ) done From c4ed34491171b61950ac291b8ab8eeba03a23c57 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Tue, 28 Jul 2026 14:31:28 -0400 Subject: [PATCH 05/17] rm allow-scripts check --- .circleci/config.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 49da9b2e218..8b6af3ce4cd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -113,7 +113,7 @@ jobs: nvm use default npm_config_ignore_scripts=true npm run bootstrap - run: - name: Validate and run approved dependency lifecycle scripts + name: Run approved dependency lifecycle scripts command: | nvm use default set -euo pipefail @@ -139,20 +139,18 @@ jobs: packages/crypto-wallet-core do echo - echo "===== Checking $package =====" + echo "===== Running approved scripts for $package =====" ( cd "$package" - if ! ../../node_modules/.bin/allow-scripts check; then + if ! ../../node_modules/.bin/allow-scripts run; then echo - echo "ERROR: allow-scripts check failed for $package" + echo "ERROR: allow-scripts run failed for $package" echo ../../node_modules/.bin/allow-scripts list exit 1 fi - - ../../node_modules/.bin/allow-scripts run ) done - run: From 2a54230b36ee7ea5d90721bf7d01cbbeac87c811 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Tue, 28 Jul 2026 14:50:10 -0400 Subject: [PATCH 06/17] update compile script to compile bcn first --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 57c41a01513..bdd4b206bd2 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "insight:build": "cd ./packages/insight && npm i && npm run build", "node": "cd packages/bitcore-node && npm start", "bws": "cd packages/bitcore-wallet-service && npm start", - "compile": "lerna run compile", + "compile": "npm run compile:bitcore-node && npm run compile:not-bitcore-node", + "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node --include-dependencies", + "compile:not-bitcore-node": "lerna run compile --ignore @bitpay-labs/bitcore-node", "lint": "eslint .", "fix:errors": "eslint --fix --quiet .", "fix:all": "eslint --fix .", From 126c3db687d80effab448c885898166dfa5bb6a3 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Tue, 28 Jul 2026 15:17:45 -0400 Subject: [PATCH 07/17] update compile script 2/n --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index bdd4b206bd2..c4c3d6852d0 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,10 @@ "insight:build": "cd ./packages/insight && npm i && npm run build", "node": "cd packages/bitcore-node && npm start", "bws": "cd packages/bitcore-wallet-service && npm start", - "compile": "npm run compile:bitcore-node && npm run compile:not-bitcore-node", - "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node --include-dependencies", + "compile": "npm run compile:bitcore-node-prod && npm run compile:not-bitcore-node && npm run compile:bitcore-node", + "compile:bitcore-node-prod": "npm --prefix packages/bitcore-node run clean && npm --prefix packages/bitcore-node run build:prod", "compile:not-bitcore-node": "lerna run compile --ignore @bitpay-labs/bitcore-node", + "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node", "lint": "eslint .", "fix:errors": "eslint --fix --quiet .", "fix:all": "eslint --fix .", From c9429788636749e74058a116f0ce196a77315f3e Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Tue, 28 Jul 2026 15:32:08 -0400 Subject: [PATCH 08/17] compile script updates 3/n --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c4c3d6852d0..c2cfda4ebdd 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,10 @@ "insight:build": "cd ./packages/insight && npm i && npm run build", "node": "cd packages/bitcore-node && npm start", "bws": "cd packages/bitcore-wallet-service && npm start", - "compile": "npm run compile:bitcore-node-prod && npm run compile:not-bitcore-node && npm run compile:bitcore-node", + "compile": "npm run compile:bitcore-node-prereqs && npm run compile:bitcore-node-prod && npm run compile:remaining && npm run compile:bitcore-node", + "compile:bitcore-node-prereqs": "npm --prefix packages/bitcore-logging run compile && npm --prefix packages/crypto-wallet-core run compile", "compile:bitcore-node-prod": "npm --prefix packages/bitcore-node run clean && npm --prefix packages/bitcore-node run build:prod", - "compile:not-bitcore-node": "lerna run compile --ignore @bitpay-labs/bitcore-node", + "compile:remaining": "lerna run compile --ignore @bitpay-labs/bitcore-node --ignore @bitpay-labs/bitcore-logging --ignore @bitpay-labs/crypto-wallet-core", "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node", "lint": "eslint .", "fix:errors": "eslint --fix --quiet .", From 24784221279e58910964965f0cc2067c8c4224dd Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 30 Jul 2026 17:00:25 -0400 Subject: [PATCH 09/17] fixes & rework new build process for improevd dev ergonomics --- .circleci/config.yml | 60 +- DEVELOPMENT.md | 512 ++++++++++++++++++ Dockerfile | 2 +- package.json | 9 +- packages/bitcore-node/Dockerfile | 8 +- packages/bitcore-wallet-service/Dockerfile | 8 +- plan-allowed-scripts.js | 102 ++++ test/validate-and-run-allowed-scripts.test.js | 376 +++++++++++++ validate-and-run-allowed-scripts.sh | 289 ++++++++++ 9 files changed, 1298 insertions(+), 68 deletions(-) create mode 100644 DEVELOPMENT.md create mode 100644 plan-allowed-scripts.js create mode 100644 test/validate-and-run-allowed-scripts.test.js create mode 100755 validate-and-run-allowed-scripts.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 8b6af3ce4cd..e25a9fd5a05 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -100,64 +100,12 @@ jobs: nvm use default set -x && node -v && npm -v && google-chrome --version && docker version && python --version # - restore_dependency_cache - # TODO: Run dependency installation, inert bootstrap, approved lifecycle - # scripts, and compilation only when restore_dependency_cache misses + # TODO: Restore the dependency cache and run setup only on a cache miss. - run: - name: Install root dependencies + name: Set up monorepo command: | nvm use default - npm ci - - run: - name: Bootstrap child dependencies without lifecycle scripts - command: | - nvm use default - npm_config_ignore_scripts=true npm run bootstrap - - run: - name: Run approved dependency lifecycle scripts - command: | - nvm use default - set -euo pipefail - - for package in \ - packages/bitcore-build \ - packages/bitcore-cli \ - packages/bitcore-client \ - packages/bitcore-lib \ - packages/bitcore-lib-cash \ - packages/bitcore-lib-doge \ - packages/bitcore-lib-ltc \ - packages/bitcore-logging \ - packages/bitcore-mnemonic \ - packages/bitcore-node \ - packages/bitcore-p2p \ - packages/bitcore-p2p-cash \ - packages/bitcore-p2p-doge \ - packages/bitcore-tss \ - packages/bitcore-wallet-client \ - packages/bitcore-wallet-service \ - packages/crypto-rpc \ - packages/crypto-wallet-core - do - echo - echo "===== Running approved scripts for $package =====" - - ( - cd "$package" - - if ! ../../node_modules/.bin/allow-scripts run; then - echo - echo "ERROR: allow-scripts run failed for $package" - echo - ../../node_modules/.bin/allow-scripts list - exit 1 - fi - ) - done - - run: - name: Compile monorepo - command: | - nvm use default - npm run compile + npm run setup - save_cache: key: node_modules-{{ checksum "package-lock.json" }}-{{ checksum "combined-package-lock.txt" }} paths: @@ -194,7 +142,7 @@ jobs: # - restore_dependency_cache - run: | # TODO figure out how to make this only run on a cache miss in restore_dependency_cache nvm use default - npm ci + npm ci --ignore-scripts - persist_to_workspace: root: ~/bitcore/packages/crypto-rpc # only persist crypto-rpc package paths: diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 00000000000..55ee82bf91b --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,512 @@ +# Bitcore Development Setup + +## Overview + +This repository uses LavaMoat `allow-scripts` to prevent dependency lifecycle scripts from executing automatically during installation. + +The repository-level `.npmrc` contains: + +```ini +ignore-scripts=true +``` + +As a result, running `npm ci` by itself installs only the root dependency tree. It does not: + +* run the former root `postinstall` workflow; +* bootstrap the Lerna-managed child packages; +* execute approved dependency lifecycle scripts; +* compile the monorepo. + +Use the repository setup command instead: + +```sh +npm run setup +``` + +This is the supported command for preparing a fresh local checkout. + +## Prerequisites + +Use the repository-supported versions of: + +* Node.js +* npm +* Python, where required by legacy build tooling +* Docker, where required by package tests or runtime services + +CircleCI currently uses Node.js `22.13.1` and npm `10.9.2`. + +Confirm your local versions with: + +```sh +node --version +npm --version +``` + +## Initial setup + +From the repository root, run: + +```sh +npm run setup +``` + +The setup command performs the following stages: + +1. Install root dependencies without running lifecycle scripts. +2. Bootstrap all Lerna-managed child dependency trees while lifecycle scripts remain disabled. +3. Validate each child package's committed LavaMoat policy. +4. Plan a deduplicated, fail-closed approved lifecycle execution. +5. Execute only the dependency lifecycle scripts explicitly approved by those policies. +6. Compile the monorepo in its required dependency order. + +The root scripts are: + +```json +{ + "setup": "npm ci --ignore-scripts && npm run setup:installed", + "setup:installed": "npm run bootstrap:inert && npm run lifecycle:approved && npm run compile", + "bootstrap:inert": "npm_config_ignore_scripts=true lerna bootstrap", + "lifecycle:approved": "./validate-and-run-allowed-scripts.sh" +} +``` + +## Why `npm ci` is not enough + +Historically, the root `postinstall` script automatically bootstrapped and compiled the repository after installation. + +That behavior is intentionally no longer tied to npm's automatic lifecycle execution. npm's `ignore-scripts=true` setting disables both untrusted dependency lifecycle scripts and first-party lifecycle hooks such as `postinstall`. + +There is no npm setting that means: + +> Disable all dependency lifecycle scripts, but automatically run only this repository's root `postinstall`. + +Instead, the repository explicitly separates installation, approved dependency execution, and trusted first-party build commands. + +Therefore: + +```sh +npm ci --ignore-scripts +``` + +means: + +> Install the root dependency tree inertly. + +Whereas: + +```sh +npm run setup +``` + +means: + +> Fully prepare the Bitcore monorepo for development. + +## Setup stages + +### Root installation + +The first stage is: + +```sh +npm ci --ignore-scripts +``` + +The command-line option is deliberate. The committed `.npmrc` provides a safe +default, while `--ignore-scripts` prevents an ambient setting such as +`npm_config_ignore_scripts=false` from re-enabling dependency lifecycle scripts +inside the setup workflow. + +The intentionally hostile test package `@lavamoat/preinstall-always-fail` must remain denied. A successful inert installation proves that npm did not execute its lifecycle script. + +### Inert child bootstrap + +The next stage is: + +```sh +npm run bootstrap:inert +``` + +This expands to: + +```sh +npm_config_ignore_scripts=true lerna bootstrap +``` + +The explicit environment variable is required. + +The root `.npmrc` protects npm commands run from the repository root, but legacy Lerna invokes npm from child-package working directories. Those child npm processes do not reliably inherit the root `.npmrc`. + +Setting `npm_config_ignore_scripts=true` explicitly ensures lifecycle scripts remain disabled while all managed child dependency trees are installed. + +Do not run an unguarded command such as: + +```sh +lerna bootstrap +``` + +or: + +```sh +npm run bootstrap +``` + +The repository intentionally does not expose an unguarded `bootstrap` npm script. + +### LavaMoat policy validation + +After bootstrap, the repository runs: + +```sh +npm run lifecycle:approved +``` + +The underlying script first runs `allow-scripts check` from each Lerna-managed child package directory. + +Each package has its own: + +* dependency tree; +* `package.json`; +* `lavamoat.allowScripts` policy; +* path-sensitive lifecycle dependency inventory. + +The current working directory determines which package policy `allow-scripts` inspects. + +The validation phase checks all 18 managed packages. It collects and reports all package-policy failures before terminating. Approved lifecycle scripts are not executed unless every package policy passes validation. + +A validation failure generally means one of the following: + +* a dependency with a lifecycle script was added but is not represented in policy; +* a dependency path or version changed; +* a committed policy entry no longer matches an installed dependency; +* the package lockfile and policy are out of sync. + +Do not bypass this failure by automatically approving new entries. + +Review the new lifecycle dependency, determine whether its script is necessary, and update policy only after completing the appropriate security and functional review. + +### Approved lifecycle execution planning + +After every policy passes, the runner builds a complete execution plan before +running any lifecycle script. + +For each package, the planner: + +* rejects top-level `install`, `postinstall`, `prepublish`, and `prepare` hooks, + because `allow-scripts run` would execute those hooks outside + `lavamoat.allowScripts`; +* rejects a top-level `binding.gyp`, because npm would synthesize an implicit + `node-gyp rebuild` install hook; +* resolves every approved dependency to its physical filesystem path; +* schedules a physical dependency tree only once when Lerna symlinks make it + visible through multiple package policies; +* rejects a package whose approvals only partially overlap an earlier + package's approvals, because invoking `allow-scripts run` would repeat the + overlapping lifecycle scripts. + +Planning failures are collected before execution begins. This preserves the +all-or-nothing validation boundary. + +Trusted first-party setup work belongs in an explicit root npm script, not in a +workspace lifecycle hook. + +### Approved dependency lifecycle execution + +Once validation and planning succeed, the runner invokes: + +```sh +allow-scripts run +``` + +only from package directories with newly scheduled approved dependency paths. + +Only dependency lifecycle paths explicitly set to `true` are allowed to execute. + +The current approved policies are narrowly limited to the required +`bcrypt#5.1.0` installation visible from: + +* `@bitpay-labs/bitcore-client`; +* `@bitpay-labs/bitcore-client` linked beneath `@bitpay-labs/bitcore-node`. + +Lerna resolves both policy paths to the same physical `bcrypt` directory, so +the planner executes its install script once. + +All other reviewed lifecycle dependencies remain denied. + +The lifecycle runner stops immediately if an approved script fails. + +The repository uses the locally installed executable: + +```sh +node_modules/.bin/allow-scripts +``` + +Do not use an unrestricted `npx allow-scripts` command, because it may download or execute a package version other than the one committed to this repository. + +### Ordered monorepo compilation + +The final setup stage is: + +```sh +npm run compile +``` + +Compilation must occur in the committed four-stage order: + +```json +{ + "compile": "npm run compile:bitcore-node-prereqs && npm run compile:bitcore-node-prod && npm run compile:remaining && npm run compile:bitcore-node", + "compile:bitcore-node-prereqs": "npm --prefix packages/bitcore-logging run compile && npm --prefix packages/crypto-wallet-core run compile", + "compile:bitcore-node-prod": "npm --prefix packages/bitcore-node run clean && npm --prefix packages/bitcore-node run build:prod", + "compile:remaining": "lerna run compile --ignore @bitpay-labs/bitcore-node --ignore @bitpay-labs/bitcore-logging --ignore @bitpay-labs/crypto-wallet-core", + "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node" +} +``` + +The ordering is significant. + +First, `bitcore-logging` and `crypto-wallet-core` are compiled because later packages require their generated output. + +Next, the production build for `bitcore-node` runs before the wider Lerna compilation. + +The remaining compilable packages then run, excluding packages already handled separately. + +Finally, `bitcore-node` runs its normal compile after its dependencies and related packages are ready. + +Do not replace this sequence with a single unordered: + +```sh +lerna run compile +``` + +The repository contains dependency-order and circularity constraints that the four-stage sequence resolves. + +## Subsequent development + +After the repository has been successfully prepared, it is not necessary to run a complete installation before every code change. + +To recompile: + +```sh +npm run compile +``` + +To run a package-specific test suite, use the corresponding root script. For example: + +```sh +npm run test:bitcore-client +npm run test:crypto-wallet-core +npm run test:bitcore-node +``` + +To start Bitcore Node: + +```sh +npm run node +``` + +To start Bitcore Wallet Service: + +```sh +npm run bws +``` + +## Clean setup + +Use a clean setup when: + +* dependency manifests or lockfiles change; +* LavaMoat policies change; +* native artifacts may be stale; +* lifecycle scripts have been run manually; +* switching between branches with dependency changes; +* diagnosing a setup or native-module failure. + +Remove all installed dependency trees: + +```sh +rm -rf node_modules + +find packages \ + -type d \ + -name node_modules \ + -prune \ + -exec rm -rf {} + +``` + +Then run: + +```sh +npm run setup +``` + +## Dependency changes + +When adding, removing, or updating a dependency: + +1. Update the appropriate package manifest and lockfile. +2. Perform an inert installation or bootstrap. +3. Run the package's `allow-scripts list` and `allow-scripts check`. +4. Review any new or changed lifecycle dependency paths. +5. Keep new entries denied unless real Bitcore build, test, runtime, or CLI behavior proves that the lifecycle-produced artifact is required. +6. Approve one exact path-sensitive key at a time. +7. Rerun the failing first-party behavior. +8. Reproduce the result from a clean installation. +9. Confirm platform-dependent results in Linux CI. + +Do not run repository-wide: + +```sh +allow-scripts auto +``` + +as a substitute for review. + +Do not approve lifecycle scripts merely because a package declares one or because installation reports an unconfigured entry. + +## `packages/insight` + +`packages/insight` is intentionally excluded from Lerna package discovery by `lerna.json`. + +Therefore, the standard setup workflow does not: + +* install Insight dependencies; +* inspect an Insight LavaMoat policy; +* execute Insight dependency lifecycle scripts; +* compile Insight. + +The existing `insight:build` command is a separate workflow and is not covered by the reviewed LavaMoat setup process. + +Treat changes to that workflow separately. + +## CI and Docker parity + +CircleCI uses the same repository-owned setup command as local development: + +```sh +npm run setup +``` + +This ensures that local and CI setup use the same: + +* inert root installation; +* guarded Lerna bootstrap; +* package-policy validation; +* approved lifecycle execution; +* compilation ordering. + +CircleCI remains responsible for environment-specific orchestration, including: + +* selecting Node and Python versions; +* restoring and saving caches; +* persisting workspaces; +* starting service containers; +* collecting artifacts and coverage; +* running downstream jobs. + +Repository setup behavior belongs in version-controlled npm and shell scripts rather than being reimplemented in CircleCI YAML. + +The Bitcore Node and Bitcore Wallet Service Dockerfiles install the root tree +with `npm ci --ignore-scripts`, copy the lifecycle runner and planner, and then +run: + +```sh +npm run setup:installed +``` + +This avoids a second root installation inside the image while preserving the +same inert bootstrap, lifecycle validation, deduplicated execution, and ordered +compilation. + +## Troubleshooting + +### `allow-scripts - allowlist needs update` + +Run the lifecycle command to identify every failing package: + +```sh +npm run lifecycle:approved +``` + +The validation phase will print the current lifecycle inventory for each package whose policy does not match its installed tree. + +Review the dependency change rather than immediately approving it. + +### Lifecycle execution planning fails + +Do not bypass planning failures by invoking `allow-scripts run` manually. + +If a workspace defines a top-level lifecycle hook, move that trusted operation +to an explicit root setup script. + +If approved dependency paths overlap, review their real paths and policies. +The runner safely skips complete overlaps, but rejects partial overlaps because +the `allow-scripts` CLI cannot execute only the non-overlapping subset. + +### Missing `bcrypt_lib.node` + +This indicates that the approved `bcrypt#5.1.0` lifecycle script did not run successfully for the affected package tree. + +Run: + +```sh +npm run lifecycle:approved +``` + +Then confirm the generated native binding exists: + +```sh +find packages \ + -path '*/node_modules/bcrypt/lib/binding/*/bcrypt_lib.node' \ + -print +``` + +### Package compilation fails because generated sibling output is missing + +Run the complete ordered compile: + +```sh +npm run compile +``` + +Do not replace it with an unordered Lerna compile. + +### Local checkout appears partially installed + +Remove root and child `node_modules` directories and rerun: + +```sh +npm run setup +``` + +### Shell script reports `Permission denied` + +Confirm the lifecycle runner is executable: + +```sh +ls -l validate-and-run-allowed-scripts.sh +git ls-files -s validate-and-run-allowed-scripts.sh +``` + +The Git mode should be: + +```text +100755 +``` + +## Security summary + +The setup model is: + +```text +Install code with an explicit dependency-lifecycle-script prohibition +→ validate committed path-sensitive policies +→ reject implicit workspace hooks and deduplicate physical dependency paths +→ execute only reviewed dependency lifecycle scripts +→ execute trusted first-party bootstrap and build commands explicitly +``` + +LavaMoat does not prevent the repository from bootstrapping or compiling. + +It prevents dependency installation from silently deciding which executable code is allowed to run. diff --git a/Dockerfile b/Dockerfile index 9853e320418..a0c3bc40255 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,4 +23,4 @@ RUN set -x \ WORKDIR /bitcore ADD . . -RUN npm ci +RUN npm ci --ignore-scripts diff --git a/package.json b/package.json index c2cfda4ebdd..65cebe9a5a3 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,19 @@ "build": "docker build -t bitcore-node . ", "build:docker": "lerna run build:docker --concurrency 1 --stream", "watch": "lerna run watch --parallel", - "postinstall": "npm run bootstrap && npm run compile", - "bootstrap": "lerna bootstrap", + "setup": "npm ci --ignore-scripts && npm run setup:installed", + "setup:installed": "npm run bootstrap:inert && npm run lifecycle:approved && npm run compile", + "bootstrap:inert": "npm_config_ignore_scripts=true lerna bootstrap", + "lifecycle:approved": "./validate-and-run-allowed-scripts.sh", + "compile": "npm run compile:bitcore-node-prereqs && npm run compile:bitcore-node-prod && npm run compile:remaining && npm run compile:bitcore-node", "insight:build": "cd ./packages/insight && npm i && npm run build", "node": "cd packages/bitcore-node && npm start", "bws": "cd packages/bitcore-wallet-service && npm start", - "compile": "npm run compile:bitcore-node-prereqs && npm run compile:bitcore-node-prod && npm run compile:remaining && npm run compile:bitcore-node", "compile:bitcore-node-prereqs": "npm --prefix packages/bitcore-logging run compile && npm --prefix packages/crypto-wallet-core run compile", "compile:bitcore-node-prod": "npm --prefix packages/bitcore-node run clean && npm --prefix packages/bitcore-node run build:prod", "compile:remaining": "lerna run compile --ignore @bitpay-labs/bitcore-node --ignore @bitpay-labs/bitcore-logging --ignore @bitpay-labs/crypto-wallet-core", "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node", + "test:lifecycle-runner": "node --test test/validate-and-run-allowed-scripts.test.js", "lint": "eslint .", "fix:errors": "eslint --fix --quiet .", "fix:all": "eslint --fix .", diff --git a/packages/bitcore-node/Dockerfile b/packages/bitcore-node/Dockerfile index a782d6d82fb..d7752bd70b9 100644 --- a/packages/bitcore-node/Dockerfile +++ b/packages/bitcore-node/Dockerfile @@ -6,13 +6,13 @@ WORKDIR /bitcore # NOTE(danny): not the most optimal layering, but it works for now COPY lerna.json ./ COPY package*.json ./ +COPY plan-allowed-scripts.js validate-and-run-allowed-scripts.sh ./ COPY packages/ ./packages/ # Install dependencies and build -RUN npm install --ignore-scripts -RUN npm run bootstrap -RUN npm run compile +RUN npm ci --ignore-scripts +RUN npm run setup:installed # Start the server WORKDIR /bitcore/packages/bitcore-node -CMD ["node", "./build/src/server.js"] \ No newline at end of file +CMD ["node", "./build/src/server.js"] diff --git a/packages/bitcore-wallet-service/Dockerfile b/packages/bitcore-wallet-service/Dockerfile index da193c05856..fc52e1347c1 100644 --- a/packages/bitcore-wallet-service/Dockerfile +++ b/packages/bitcore-wallet-service/Dockerfile @@ -6,13 +6,13 @@ WORKDIR /bitcore # NOTE(danny): not the most optimal layering, but it works for now COPY lerna.json ./ COPY package*.json ./ +COPY plan-allowed-scripts.js validate-and-run-allowed-scripts.sh ./ COPY packages/ ./packages/ # Install dependencies and build -RUN npm install --ignore-scripts -RUN npm run bootstrap -RUN npm run compile +RUN npm ci --ignore-scripts +RUN npm run setup:installed # Start the server WORKDIR /bitcore/packages/bitcore-wallet-service -CMD ["./start-docker.sh"] \ No newline at end of file +CMD ["./start-docker.sh"] diff --git a/plan-allowed-scripts.js b/plan-allowed-scripts.js new file mode 100644 index 00000000000..fdf91461121 --- /dev/null +++ b/plan-allowed-scripts.js @@ -0,0 +1,102 @@ +#!/usr/bin/env node + +'use strict'; + +const fs = require('node:fs'); +const path = require('node:path'); +const { loadAllPackageConfigurations } = require('@lavamoat/allow-scripts'); + +const IMPLICIT_TOP_LEVEL_EVENTS = [ + 'install', + 'postinstall', + 'prepublish', + 'prepare' +]; + +async function main() { + const packageDirArgument = process.argv[2]; + if (!packageDirArgument) { + throw new Error('A package directory is required.'); + } + + const packageDir = fs.realpathSync(packageDirArgument); + const packageJsonPath = path.join(packageDir, 'package.json'); + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); + const packageName = packageJson.name || packageDir; + const scripts = packageJson.scripts || {}; + const implicitTopLevelEvents = IMPLICIT_TOP_LEVEL_EVENTS.filter( + event => typeof scripts[event] === 'string' && scripts[event].trim() !== '' + ); + + if (implicitTopLevelEvents.length > 0) { + throw new Error( + `${packageName} defines top-level lifecycle hooks that ` + + `allow-scripts run would execute outside lavamoat.allowScripts: ` + + implicitTopLevelEvents.join(', ') + ); + } + + if (fs.existsSync(path.join(packageDir, 'binding.gyp'))) { + throw new Error( + `${packageName} contains binding.gyp, which would cause ` + + `allow-scripts run to synthesize an unconfigured install hook.` + ); + } + + const { + configs: { lifecycle }, + somePoliciesAreMissing + } = await loadAllPackageConfigurations({ rootDir: packageDir }); + + if ( + somePoliciesAreMissing || + lifecycle.missingPolicies.length > 0 || + lifecycle.excessPolicies.length > 0 + ) { + throw new Error( + `${packageName}'s lifecycle policy changed after validation.` + ); + } + + for (const [pattern, decision] of Object.entries(lifecycle.allowConfig)) { + if (typeof decision !== 'boolean') { + throw new Error( + `${packageName}'s policy decision for ${pattern} must be boolean.` + ); + } + } + + const approvedPaths = new Set(); + for (const pattern of lifecycle.allowedPatterns) { + const matchingPackages = lifecycle.packagesWithScripts.get(pattern); + if (!matchingPackages || matchingPackages.length === 0) { + throw new Error( + `${packageName} allows ${pattern}, but no installed package matches it.` + ); + } + + for (const packageWithScripts of matchingPackages) { + const approvedPath = fs.realpathSync(packageWithScripts.path); + if (approvedPath.includes('\n')) { + throw new Error( + `${packageName} has an approved dependency path containing a newline.` + ); + } + if (approvedPaths.has(approvedPath)) { + throw new Error( + `${packageName} resolves multiple approvals to ${approvedPath}.` + ); + } + approvedPaths.add(approvedPath); + } + } + + for (const approvedPath of approvedPaths) { + process.stdout.write(`${approvedPath}\n`); + } +} + +main().catch(error => { + console.error(`ERROR: ${error.message}`); + process.exitCode = 1; +}); diff --git a/test/validate-and-run-allowed-scripts.test.js b/test/validate-and-run-allowed-scripts.test.js new file mode 100644 index 00000000000..2b479a5cf5f --- /dev/null +++ b/test/validate-and-run-allowed-scripts.test.js @@ -0,0 +1,376 @@ +'use strict'; + +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { spawn, spawnSync } = require('node:child_process'); +const { afterEach, test } = require('node:test'); + +const REPOSITORY_ROOT = path.resolve(__dirname, '..'); +const temporaryDirectories = new Set(); + +afterEach(() => { + for (const temporaryDirectory of temporaryDirectories) { + fs.rmSync(temporaryDirectory, { force: true, recursive: true }); + } + temporaryDirectories.clear(); +}); + +function writeExecutable(filePath, contents) { + fs.writeFileSync(filePath, contents, { mode: 0o755 }); + fs.chmodSync(filePath, 0o755); +} + +function createFixture(packageDefinitions) { + const rootDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-allowed-scripts-test-') + ); + temporaryDirectories.add(rootDir); + + const binDir = path.join(rootDir, 'node_modules', '.bin'); + const packagesDir = path.join(rootDir, 'packages'); + const runnerPath = path.join(rootDir, 'validate-and-run-allowed-scripts.sh'); + const plannerPath = path.join(rootDir, 'plan-allowed-scripts.js'); + const packageListPath = path.join(rootDir, 'package-list.txt'); + const logPath = path.join(rootDir, 'allow-scripts.log'); + const readyPath = path.join(rootDir, 'lerna-ready'); + + fs.mkdirSync(binDir, { recursive: true }); + fs.mkdirSync(packagesDir, { recursive: true }); + fs.copyFileSync( + path.join(REPOSITORY_ROOT, 'validate-and-run-allowed-scripts.sh'), + runnerPath + ); + fs.chmodSync(runnerPath, 0o755); + + const packageDirectories = []; + for (const packageDefinition of packageDefinitions) { + const packageDir = path.join(packagesDir, packageDefinition.directory); + packageDirectories.push(packageDir); + fs.mkdirSync(packageDir, { recursive: true }); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify(packageDefinition.packageJson, null, 2)}\n` + ); + } + fs.writeFileSync(packageListPath, `${packageDirectories.join('\n')}\n`); + + writeExecutable( + path.join(binDir, 'lerna'), + `#!/bin/sh +if [ -n "\${BITCORE_TEST_READY_FILE:-}" ]; then + : > "$BITCORE_TEST_READY_FILE" +fi +if [ -n "\${BITCORE_TEST_LERNA_DELAY:-}" ]; then + sleep "$BITCORE_TEST_LERNA_DELAY" +fi +cat "$BITCORE_TEST_PACKAGE_LIST" +` + ); + + writeExecutable( + path.join(binDir, 'allow-scripts'), + `#!/bin/sh +command_name=$1 +package_name=$(basename "$PWD") +printf '%s\\t%s\\n' "$command_name" "$package_name" >> "$BITCORE_TEST_LOG" + +if [ "$command_name" = "check" ] && [ "\${BITCORE_TEST_FAIL_CHECK:-}" = "$package_name" ]; then + exit 1 +fi + +if [ "$command_name" = "run" ] && [ "\${BITCORE_TEST_FAIL_RUN:-}" = "$package_name" ]; then + exit 23 +fi + +if [ "$command_name" = "list" ]; then + echo "mock lifecycle inventory for $package_name" +fi +` + ); + + fs.writeFileSync( + plannerPath, + `'use strict'; + +const fs = require('node:fs'); + +const packageDir = process.argv[2]; +const packageJson = JSON.parse( + fs.readFileSync(\`\${packageDir}/package.json\`, 'utf8') +); +const implicitEvents = ['install', 'postinstall', 'prepublish', 'prepare'] + .filter(event => { + const script = packageJson.scripts?.[event]; + return typeof script === 'string' && script.trim() !== ''; + }); + +if (implicitEvents.length > 0) { + console.error( + \`ERROR: implicit top-level lifecycle hooks: \${implicitEvents.join(', ')}\` + ); + process.exit(1); +} + +for (const approvedPath of packageJson.testApprovedPaths || []) { + process.stdout.write(\`\${fs.realpathSync(approvedPath)}\\n\`); +} +` + ); + + return { + env: { + ...process.env, + BITCORE_TEST_LOG: logPath, + BITCORE_TEST_PACKAGE_LIST: packageListPath + }, + logPath, + readyPath, + rootDir, + runnerPath + }; +} + +function runFixture(fixture, additionalEnv = {}) { + return spawnSync('/bin/sh', [fixture.runnerPath], { + cwd: fixture.rootDir, + encoding: 'utf8', + env: { ...fixture.env, ...additionalEnv } + }); +} + +function readLog(logPath) { + if (!fs.existsSync(logPath)) { + return []; + } + return fs.readFileSync(logPath, 'utf8').trim().split('\n'); +} + +async function waitForFile(filePath) { + const deadline = Date.now() + 5000; + while (!fs.existsSync(filePath)) { + if (Date.now() >= deadline) { + throw new Error(`Timed out waiting for ${filePath}`); + } + await new Promise(resolve => setTimeout(resolve, 20)); + } +} + +test('production planner rejects implicit workspace lifecycle hooks', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ + name: 'package-with-prepare', + scripts: { + prepare: 'echo unexpected' + } + }, null, 2)}\n` + ); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } + ); + + assert.equal(result.status, 1); + assert.match( + result.stderr, + /top-level lifecycle hooks.*outside lavamoat\.allowScripts: prepare/ + ); +}); + +test('production planner rejects an implicit node-gyp install hook', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ name: 'package-with-binding-gyp' }, null, 2)}\n` + ); + fs.writeFileSync(path.join(packageDir, 'binding.gyp'), '{}\n'); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } + ); + + assert.equal(result.status, 1); + assert.match(result.stderr, /binding\.gyp.*unconfigured install hook/); +}); + +test('executes a shared physical approved path only once', () => { + const sharedDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-shared-dependency-') + ); + temporaryDirectories.add(sharedDependency); + + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [sharedDependency] + } + }, + { + directory: 'package-b', + packageJson: { + name: 'package-b', + testApprovedPaths: [sharedDependency] + } + } + ]); + + const result = runFixture(fixture); + + assert.equal(result.status, 0, result.stderr); + assert.deepEqual(readLog(fixture.logPath), [ + 'check\tpackage-a', + 'check\tpackage-b', + 'run\tpackage-a' + ]); + assert.match( + result.stdout, + /SKIP: package-b's approved dependency scripts are already planned\./ + ); +}); + +test('rejects partial approved-path overlaps before execution', () => { + const sharedDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-shared-dependency-') + ); + const uniqueDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-unique-dependency-') + ); + temporaryDirectories.add(sharedDependency); + temporaryDirectories.add(uniqueDependency); + + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [sharedDependency] + } + }, + { + directory: 'package-b', + packageJson: { + name: 'package-b', + testApprovedPaths: [sharedDependency, uniqueDependency] + } + } + ]); + + const result = runFixture(fixture); + + assert.equal(result.status, 1); + assert.deepEqual(readLog(fixture.logPath), [ + 'check\tpackage-a', + 'check\tpackage-b' + ]); + assert.match(result.stdout, /package-b has a partial overlap/); + assert.match(result.stdout, /Approved lifecycle scripts were not executed/); +}); + +test('rejects implicit workspace lifecycle hooks before execution', () => { + const approvedDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-approved-dependency-') + ); + temporaryDirectories.add(approvedDependency); + + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + scripts: { + prepare: 'echo unsafe implicit execution' + }, + testApprovedPaths: [approvedDependency] + } + } + ]); + + const result = runFixture(fixture); + + assert.equal(result.status, 1); + assert.deepEqual(readLog(fixture.logPath), ['check\tpackage-a']); + assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); + assert.match(result.stdout, /Approved lifecycle scripts were not executed/); +}); + +test('preserves an approved lifecycle execution failure status', () => { + const approvedDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-approved-dependency-') + ); + temporaryDirectories.add(approvedDependency); + + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [approvedDependency] + } + } + ]); + + const result = runFixture(fixture, { + BITCORE_TEST_FAIL_RUN: 'package-a' + }); + + assert.equal(result.status, 23); + assert.deepEqual(readLog(fixture.logPath), [ + 'check\tpackage-a', + 'run\tpackage-a', + 'list\tpackage-a' + ]); + assert.match(result.stdout, /Exit status: 23/); +}); + +test('terminates with the signal status instead of continuing', async () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [] + } + } + ]); + const child = spawn('/bin/sh', [fixture.runnerPath], { + cwd: fixture.rootDir, + env: { + ...fixture.env, + BITCORE_TEST_LERNA_DELAY: '1', + BITCORE_TEST_READY_FILE: fixture.readyPath + } + }); + let stdout = ''; + child.stdout.on('data', chunk => { + stdout += chunk; + }); + + await waitForFile(fixture.readyPath); + child.kill('SIGTERM'); + + const result = await new Promise((resolve, reject) => { + child.once('error', reject); + child.once('close', (code, signal) => resolve({ code, signal })); + }); + + assert.deepEqual(result, { code: 143, signal: null }); + assert.doesNotMatch( + stdout, + /Approved dependency lifecycle scripts completed successfully/ + ); +}); diff --git a/validate-and-run-allowed-scripts.sh b/validate-and-run-allowed-scripts.sh new file mode 100755 index 00000000000..ec7c632bf2b --- /dev/null +++ b/validate-and-run-allowed-scripts.sh @@ -0,0 +1,289 @@ +#!/bin/sh + +# Validate every Lerna-managed package's LavaMoat allow-scripts policy, +# reporting all validation failures before exiting. +# +# If all policies validate, build a fail-closed execution plan and then run +# each physical approved dependency tree at most once. Execution stops on the +# first failure. + +set -u + +ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +LERNA="$ROOT_DIR/node_modules/.bin/lerna" +ALLOW_SCRIPTS="$ROOT_DIR/node_modules/.bin/allow-scripts" +PLAN_ALLOWED_SCRIPTS="$ROOT_DIR/plan-allowed-scripts.js" + +PACKAGE_LIST= +RUN_PACKAGE_LIST= +SEEN_SCRIPT_PATHS= +CURRENT_SCRIPT_PATHS= + +cleanup() { + [ -z "$PACKAGE_LIST" ] || rm -f -- "$PACKAGE_LIST" + [ -z "$RUN_PACKAGE_LIST" ] || rm -f -- "$RUN_PACKAGE_LIST" + [ -z "$SEEN_SCRIPT_PATHS" ] || rm -f -- "$SEEN_SCRIPT_PATHS" + [ -z "$CURRENT_SCRIPT_PATHS" ] || rm -f -- "$CURRENT_SCRIPT_PATHS" +} + +trap cleanup 0 +trap 'exit 129' HUP +trap 'exit 130' INT +trap 'exit 143' TERM + +if ! PACKAGE_LIST=$(mktemp); then + echo "ERROR: Unable to create a temporary package-list file." + exit 1 +fi + +if ! RUN_PACKAGE_LIST=$(mktemp); then + echo "ERROR: Unable to create a temporary execution-plan file." + exit 1 +fi + +if ! SEEN_SCRIPT_PATHS=$(mktemp); then + echo "ERROR: Unable to create a temporary approved-path file." + exit 1 +fi + +if ! CURRENT_SCRIPT_PATHS=$(mktemp); then + echo "ERROR: Unable to create a temporary package-path file." + exit 1 +fi + +if [ ! -x "$LERNA" ]; then + echo "ERROR: Lerna executable not found:" + echo " $LERNA" + echo "Run npm ci --ignore-scripts before running this script." + exit 1 +fi + +if [ ! -x "$ALLOW_SCRIPTS" ]; then + echo "ERROR: allow-scripts executable not found:" + echo " $ALLOW_SCRIPTS" + echo "Run npm ci --ignore-scripts before running this script." + exit 1 +fi + +if [ ! -f "$PLAN_ALLOWED_SCRIPTS" ]; then + echo "ERROR: Approved lifecycle planner not found:" + echo " $PLAN_ALLOWED_SCRIPTS" + exit 1 +fi + +if ! cd "$ROOT_DIR"; then + echo "ERROR: Unable to enter the repository root:" + echo " $ROOT_DIR" + exit 1 +fi + +# Using Lerna to generate the package list preserves the repository's +# configured package scope and therefore excludes packages/insight. +if ! "$LERNA" list --all --parseable > "$PACKAGE_LIST"; then + echo "ERROR: Unable to obtain the Lerna package list." + exit 1 +fi + +echo "Validating LavaMoat lifecycle policies..." +echo + +check_failures=0 +package_count=0 + +while IFS= read -r package_dir; do + [ -n "$package_dir" ] || continue + + package_count=$((package_count + 1)) + if ! package_name=$( + cd "$package_dir" && + node -p 'require("./package.json").name' + ); then + echo "ERROR: Unable to determine package name for:" + echo " $package_dir" + exit 1 + fi + + echo "Checking $package_name" + + if ( + cd "$package_dir" && + "$ALLOW_SCRIPTS" check + ); then + echo "PASS: $package_name" + else + check_failures=$((check_failures + 1)) + + echo "FAIL: $package_name" + echo + echo "Current lifecycle inventory for $package_name:" + echo "------------------------------------------------------------" + + ( + cd "$package_dir" && + "$ALLOW_SCRIPTS" list + ) || true + + echo "------------------------------------------------------------" + fi + + echo +done < "$PACKAGE_LIST" + +if [ "$package_count" -eq 0 ]; then + echo "ERROR: Lerna returned no managed packages." + exit 1 +fi + +if [ "$check_failures" -ne 0 ]; then + echo "ERROR: LavaMoat policy validation failed for $check_failures package(s)." + echo "Approved lifecycle scripts were not executed." + exit 1 +fi + +echo "All $package_count package policies passed validation." +echo +echo "Planning approved dependency lifecycle execution..." +echo + +plan_failures=0 + +while IFS= read -r package_dir; do + [ -n "$package_dir" ] || continue + + if ! package_name=$( + cd "$package_dir" && + node -p 'require("./package.json").name' + ); then + echo "ERROR: Unable to determine package name for:" + echo " $package_dir" + exit 1 + fi + + if ! node "$PLAN_ALLOWED_SCRIPTS" "$package_dir" > "$CURRENT_SCRIPT_PATHS"; then + echo "FAIL: Unable to plan approved lifecycle scripts for $package_name." + echo + plan_failures=$((plan_failures + 1)) + continue + fi + + if ! duplicate_current_paths=$( + awk 'seen[$0]++ { print }' "$CURRENT_SCRIPT_PATHS" + ); then + echo "ERROR: Unable to check $package_name for duplicate approved paths." + exit 1 + fi + + if [ -n "$duplicate_current_paths" ]; then + echo "FAIL: $package_name resolves multiple approvals to the same path:" + echo "$duplicate_current_paths" + echo "The runner cannot safely invoke allow-scripts without executing that path more than once." + echo + plan_failures=$((plan_failures + 1)) + continue + fi + + path_count=0 + new_path_count=0 + seen_path_count=0 + + while IFS= read -r approved_path; do + [ -n "$approved_path" ] || continue + + path_count=$((path_count + 1)) + if grep -Fqx -- "$approved_path" "$SEEN_SCRIPT_PATHS"; then + seen_path_count=$((seen_path_count + 1)) + else + grep_status=$? + if [ "$grep_status" -ne 1 ]; then + echo "ERROR: Unable to read the approved lifecycle path plan." + exit 1 + fi + new_path_count=$((new_path_count + 1)) + fi + done < "$CURRENT_SCRIPT_PATHS" + + if [ "$path_count" -eq 0 ]; then + echo "SKIP: $package_name has no approved dependency lifecycle scripts." + echo + continue + fi + + if [ "$new_path_count" -ne 0 ] && [ "$seen_path_count" -ne 0 ]; then + echo "FAIL: $package_name has a partial overlap with an earlier package's approved paths." + echo "The runner cannot safely invoke allow-scripts without repeating a lifecycle script." + echo + plan_failures=$((plan_failures + 1)) + continue + fi + + if [ "$seen_path_count" -eq "$path_count" ]; then + echo "SKIP: $package_name's approved dependency scripts are already planned." + echo + continue + fi + + if ! cat "$CURRENT_SCRIPT_PATHS" >> "$SEEN_SCRIPT_PATHS"; then + echo "ERROR: Unable to update the approved lifecycle path plan." + exit 1 + fi + + if ! printf '%s\n' "$package_dir" >> "$RUN_PACKAGE_LIST"; then + echo "ERROR: Unable to update the package execution plan." + exit 1 + fi + + echo "PLAN: Run approved dependency lifecycle scripts for $package_name." + echo +done < "$PACKAGE_LIST" + +if [ "$plan_failures" -ne 0 ]; then + echo "ERROR: Approved lifecycle execution planning failed for $plan_failures package(s)." + echo "Approved lifecycle scripts were not executed." + exit 1 +fi + +echo "Executing approved dependency lifecycle scripts..." +echo + +while IFS= read -r package_dir; do + [ -n "$package_dir" ] || continue + + if ! package_name=$( + cd "$package_dir" && + node -p 'require("./package.json").name' + ); then + echo "ERROR: Unable to determine package name for:" + echo " $package_dir" + exit 1 + fi + + echo "Running approved lifecycle scripts for $package_name" + + if ( + cd "$package_dir" && + "$ALLOW_SCRIPTS" run + ); then + echo "PASS: $package_name" + else + run_status=$? + + echo + echo "ERROR: Approved lifecycle execution failed for $package_name." + echo "Exit status: $run_status" + echo + echo "Current lifecycle inventory:" + echo "------------------------------------------------------------" + + ( + cd "$package_dir" && + "$ALLOW_SCRIPTS" list + ) || true + + echo "------------------------------------------------------------" + exit "$run_status" + fi + + echo +done < "$RUN_PACKAGE_LIST" + +echo "Approved dependency lifecycle scripts completed successfully." From 607b039b03007ca609e22c2efef9013a337472d7 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 30 Jul 2026 17:14:06 -0400 Subject: [PATCH 10/17] lint --- plan-allowed-scripts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plan-allowed-scripts.js b/plan-allowed-scripts.js index fdf91461121..40ab545ed33 100644 --- a/plan-allowed-scripts.js +++ b/plan-allowed-scripts.js @@ -31,7 +31,7 @@ async function main() { if (implicitTopLevelEvents.length > 0) { throw new Error( `${packageName} defines top-level lifecycle hooks that ` + - `allow-scripts run would execute outside lavamoat.allowScripts: ` + + 'allow-scripts run would execute outside lavamoat.allowScripts: ' + implicitTopLevelEvents.join(', ') ); } @@ -39,7 +39,7 @@ async function main() { if (fs.existsSync(path.join(packageDir, 'binding.gyp'))) { throw new Error( `${packageName} contains binding.gyp, which would cause ` + - `allow-scripts run to synthesize an unconfigured install hook.` + 'allow-scripts run to synthesize an unconfigured install hook.' ); } From 1260de01919a23456a1031b1e5a2856657c3ad9b Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 30 Jul 2026 17:18:21 -0400 Subject: [PATCH 11/17] add script description --- plan-allowed-scripts.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plan-allowed-scripts.js b/plan-allowed-scripts.js index 40ab545ed33..cbaefc457ba 100644 --- a/plan-allowed-scripts.js +++ b/plan-allowed-scripts.js @@ -2,6 +2,16 @@ 'use strict'; +// Build a fail-closed lifecycle-script plan for one workspace package. Given +// the package directory on the command line, this verifies that its LavaMoat +// policy is complete and unambiguous, rejects top-level hooks that +// allow-scripts could run outside that policy, and prints each uniquely +// approved dependency's real path (one per line) for the repository runner to +// deduplicate before execution. +// +// This script only plans +// THIS SCRIPT NEVER RUNS LIFECYCLE SCRIPTS ITSELF. + const fs = require('node:fs'); const path = require('node:path'); const { loadAllPackageConfigurations } = require('@lavamoat/allow-scripts'); From 0677cab986a385e410bd221c2752d0e4efeced71 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Thu, 30 Jul 2026 19:29:18 -0400 Subject: [PATCH 12/17] remove versioning from all package.json lavamoat.allowScripts which are false --- DEVELOPMENT.md | 36 ++++++++++++++++++++ packages/bitcore-build/package.json | 16 ++++----- packages/bitcore-cli/package.json | 18 +++++----- packages/bitcore-client/package.json | 8 ++--- packages/bitcore-lib-cash/package.json | 18 +++++----- packages/bitcore-lib-doge/package.json | 18 +++++----- packages/bitcore-lib-ltc/package.json | 18 +++++----- packages/bitcore-lib/package.json | 18 +++++----- packages/bitcore-mnemonic/package.json | 18 +++++----- packages/bitcore-node/package.json | 28 +++++++-------- packages/bitcore-p2p-cash/package.json | 20 +++++------ packages/bitcore-p2p-doge/package.json | 20 +++++------ packages/bitcore-p2p/package.json | 20 +++++------ packages/bitcore-tss/package.json | 20 +++++------ packages/bitcore-wallet-client/package.json | 16 ++++----- packages/bitcore-wallet-service/package.json | 10 +++--- packages/crypto-rpc/package.json | 6 ++-- packages/crypto-wallet-core/package.json | 2 +- 18 files changed, 173 insertions(+), 137 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 55ee82bf91b..29090cac4ed 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -355,6 +355,42 @@ When adding, removing, or updating a dependency: 8. Reproduce the result from a clean installation. 9. Confirm platform-dependent results in Linux CI. +### Policy versioning + +Use a hybrid versioning policy for `lavamoat.allowScripts`: + +* Entries set to `true` must include the exact reviewed dependency version. +* Entries set to `false` may omit the final `#version` suffix. + +For example: + +```json +{ + "lavamoat": { + "allowScripts": { + "secp256k1": false, + "@bitpay-labs/crypto-wallet-core>tiny-secp256k1": false, + "bcrypt#5.1.0": true, + "@bitpay-labs/bitcore-client>bcrypt#5.1.0": true + } + } +} +``` + +A versionless denied entry remains denied when that dependency is upgraded, +which reduces policy churn. It applies only to the same path-sensitive +dependency name; a new package or dependency path remains unconfigured and +causes validation to fail. + +An approved entry remains version-pinned so an unreviewed future release cannot +inherit permission to execute lifecycle code. + +Do not use `--skip-versions` with `allow-scripts auto`, `check`, or `run`. +That option changes version matching globally, including approved entries, and +using it for configuration but not execution creates incompatible policies. +Convert existing denied entries to versionless keys as a deliberate, +reviewable manifest change while leaving every approved entry pinned. + Do not run repository-wide: ```sh diff --git a/packages/bitcore-build/package.json b/packages/bitcore-build/package.json index c1526328160..c39694dfbb5 100644 --- a/packages/bitcore-build/package.json +++ b/packages/bitcore-build/package.json @@ -64,14 +64,14 @@ "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", "lavamoat": { "allowScripts": { - "@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@wdio/cli>tsx>esbuild#0.25.1": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + "@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@wdio/browser-runner>vite>esbuild": false, + "@wdio/cli>@wdio/utils>edgedriver": false, + "@wdio/cli>@wdio/utils>geckodriver": false, + "@wdio/cli>tsx>esbuild": false, + "gulp>glob-watcher>chokidar>fsevents": false } } } diff --git a/packages/bitcore-cli/package.json b/packages/bitcore-cli/package.json index 51678c53052..d00fd626142 100644 --- a/packages/bitcore-cli/package.json +++ b/packages/bitcore-cli/package.json @@ -67,15 +67,15 @@ "gitHead": "d1c7f8b0c3a2e4f5b6c7d8e9f0a1b2c3d4e5f6g7", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, - "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, - "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, - "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, - "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "@bitpay-labs/bitcore-wallet-service>moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak#3.0.4": false, - "@bitpay-labs/bitcore-wallet-service>secp256k1#4.0.3": false, - "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "@bitpay-labs/bitcore-wallet-service>moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak": false, + "@bitpay-labs/bitcore-wallet-service>secp256k1": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false } } } diff --git a/packages/bitcore-client/package.json b/packages/bitcore-client/package.json index 804128a327b..ab7e2b8bb52 100644 --- a/packages/bitcore-client/package.json +++ b/packages/bitcore-client/package.json @@ -70,11 +70,11 @@ "gitHead": "e091d99915d099863ad3e78dbe867aa7780191e4", "lavamoat": { "allowScripts": { - "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, "bcrypt#5.1.0": true, - "leveldown#6.1.1": false, - "secp256k1#3.7.1": false, - "tsx>esbuild#0.27.3": false + "leveldown": false, + "secp256k1": false, + "tsx>esbuild": false } } } diff --git a/packages/bitcore-lib-cash/package.json b/packages/bitcore-lib-cash/package.json index 79773128b7c..a817b104775 100644 --- a/packages/bitcore-lib-cash/package.json +++ b/packages/bitcore-lib-cash/package.json @@ -52,15 +52,15 @@ "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, - "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents": false, + "gulp>glob-watcher>chokidar>fsevents": false } } } diff --git a/packages/bitcore-lib-doge/package.json b/packages/bitcore-lib-doge/package.json index 5da54329ffa..fbead73041a 100644 --- a/packages/bitcore-lib-doge/package.json +++ b/packages/bitcore-lib-doge/package.json @@ -52,15 +52,15 @@ "license": "MIT", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, - "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents": false, + "gulp>glob-watcher>chokidar>fsevents": false } } } diff --git a/packages/bitcore-lib-ltc/package.json b/packages/bitcore-lib-ltc/package.json index 9d7d083dbf8..562cef657b4 100644 --- a/packages/bitcore-lib-ltc/package.json +++ b/packages/bitcore-lib-ltc/package.json @@ -103,15 +103,15 @@ "license": "MIT", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, - "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents": false, + "gulp>glob-watcher>chokidar>fsevents": false } } } diff --git a/packages/bitcore-lib/package.json b/packages/bitcore-lib/package.json index 7c8575f3210..a8aa15643b5 100644 --- a/packages/bitcore-lib/package.json +++ b/packages/bitcore-lib/package.json @@ -52,15 +52,15 @@ "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, - "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents": false, + "gulp>glob-watcher>chokidar>fsevents": false } } } diff --git a/packages/bitcore-mnemonic/package.json b/packages/bitcore-mnemonic/package.json index 9d157077d2b..056638332c3 100644 --- a/packages/bitcore-mnemonic/package.json +++ b/packages/bitcore-mnemonic/package.json @@ -46,15 +46,15 @@ "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, - "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.11": false + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents": false, + "gulp>glob-watcher>chokidar>fsevents": false } } } diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index 723534b736d..8d2ddffc442 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -107,21 +107,21 @@ "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, + "@bitpay-labs/bitcore-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, "@bitpay-labs/bitcore-client>bcrypt#5.1.0": true, - "@bitpay-labs/bitcore-client>leveldown#6.1.1": false, - "@bitpay-labs/bitcore-client>secp256k1#3.7.1": false, - "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, - "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, - "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "@bitpay-labs/crypto-rpc>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "@bitpay-labs/crypto-rpc>lightning>@grpc/proto-loader>protobufjs#7.5.4": false, - "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "@metaplex-foundation/umi-bundle-defaults>@solana/web3.js>rpc-websockets>utf-8-validate#6.0.6": false, - "secp256k1#4.0.3": false, - "sinon#4.4.8": false, - "socket.io>engine.io>ws>bufferutil#4.1.0": false, - "socket.io>engine.io>ws>utf-8-validate#5.0.10": false + "@bitpay-labs/bitcore-client>leveldown": false, + "@bitpay-labs/bitcore-client>secp256k1": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1": false, + "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "@bitpay-labs/crypto-rpc>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "@bitpay-labs/crypto-rpc>lightning>@grpc/proto-loader>protobufjs": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "@metaplex-foundation/umi-bundle-defaults>@solana/web3.js>rpc-websockets>utf-8-validate": false, + "secp256k1": false, + "sinon": false, + "socket.io>engine.io>ws>bufferutil": false, + "socket.io>engine.io>ws>utf-8-validate": false } } } diff --git a/packages/bitcore-p2p-cash/package.json b/packages/bitcore-p2p-cash/package.json index fc087c28d44..a4cf27ed5ff 100644 --- a/packages/bitcore-p2p-cash/package.json +++ b/packages/bitcore-p2p-cash/package.json @@ -76,16 +76,16 @@ "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, - "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>undertaker>es6-weak-map>es5-ext#0.10.64": false + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents": false, + "gulp>glob-watcher>chokidar>fsevents": false, + "gulp>undertaker>es6-weak-map>es5-ext": false } } } diff --git a/packages/bitcore-p2p-doge/package.json b/packages/bitcore-p2p-doge/package.json index 12a612138d9..6379845c697 100644 --- a/packages/bitcore-p2p-doge/package.json +++ b/packages/bitcore-p2p-doge/package.json @@ -33,16 +33,16 @@ "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, - "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.13": false, - "gulp>undertaker>es6-weak-map>es5-ext#0.10.64": false + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents": false, + "gulp>glob-watcher>chokidar>fsevents": false, + "gulp>undertaker>es6-weak-map>es5-ext": false } } } diff --git a/packages/bitcore-p2p/package.json b/packages/bitcore-p2p/package.json index 0dcbb8b580d..b6f3cfde361 100644 --- a/packages/bitcore-p2p/package.json +++ b/packages/bitcore-p2p/package.json @@ -33,16 +33,16 @@ "gitHead": "012cc0216a9bc6b195035855bd17149bad41acd1", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.11.13": false, - "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver#6.1.1": false, - "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver#5.0.0": false, - "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild#0.25.1": false, - "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>glob-watcher>chokidar>fsevents#1.2.11": false, - "gulp>undertaker>es6-weak-map>es5-ext#0.10.64": false + "@bitpay-labs/bitcore-build>@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@bitpay-labs/bitcore-build>@wdio/browser-runner>vite>esbuild": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>edgedriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>@wdio/utils>geckodriver": false, + "@bitpay-labs/bitcore-build>@wdio/cli>tsx>esbuild": false, + "@bitpay-labs/bitcore-build>gulp>glob-watcher>chokidar>fsevents": false, + "gulp>glob-watcher>chokidar>fsevents": false, + "gulp>undertaker>es6-weak-map>es5-ext": false } } } diff --git a/packages/bitcore-tss/package.json b/packages/bitcore-tss/package.json index d8d9c609f2f..b3aa2dde38f 100644 --- a/packages/bitcore-tss/package.json +++ b/packages/bitcore-tss/package.json @@ -42,16 +42,16 @@ }, "lavamoat": { "allowScripts": { - "@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, - "@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, - "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild#0.14.54": false, - "@wdio/browser-runner>modern-node-polyfills>esbuild#0.18.20": false, - "@wdio/browser-runner>vite-plugin-top-level-await>@swc/core#1.15.18": false, - "@wdio/browser-runner>vite>esbuild#0.21.5": false, - "@wdio/cli>@wdio/utils>edgedriver#6.3.0": false, - "@wdio/cli>@wdio/utils>geckodriver#6.1.0": false, - "@wdio/cli>tsx>esbuild#0.27.3": false + "@bitgo/sdk-lib-mpc>cbor-x>cbor-extract": false, + "@bitgo/sdk-lib-mpc>secp256k1": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "@wdio/browser-runner>@originjs/vite-plugin-commonjs>esbuild": false, + "@wdio/browser-runner>modern-node-polyfills>esbuild": false, + "@wdio/browser-runner>vite-plugin-top-level-await>@swc/core": false, + "@wdio/browser-runner>vite>esbuild": false, + "@wdio/cli>@wdio/utils>edgedriver": false, + "@wdio/cli>@wdio/utils>geckodriver": false, + "@wdio/cli>tsx>esbuild": false } } } diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 07eef1fff81..493d5dc12ff 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -66,14 +66,14 @@ "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, - "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, - "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, - "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, - "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "@bitpay-labs/bitcore-wallet-service>moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak#3.0.4": false, - "@bitpay-labs/bitcore-wallet-service>secp256k1#4.0.3": false, - "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false + "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract": false, + "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1": false, + "@bitpay-labs/bitcore-wallet-service>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "@bitpay-labs/bitcore-wallet-service>moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak": false, + "@bitpay-labs/bitcore-wallet-service>secp256k1": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false } } } diff --git a/packages/bitcore-wallet-service/package.json b/packages/bitcore-wallet-service/package.json index 482b6b7fb01..4131e555c84 100644 --- a/packages/bitcore-wallet-service/package.json +++ b/packages/bitcore-wallet-service/package.json @@ -110,11 +110,11 @@ "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761", "lavamoat": { "allowScripts": { - "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract#2.2.1": false, - "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1#5.0.1": false, - "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak#3.0.4": false, - "secp256k1#4.0.3": false + "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract": false, + "@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>secp256k1": false, + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "moralis>@moralisweb3/streams>ethereumjs-util>ethereum-cryptography>keccak": false, + "secp256k1": false } } } diff --git a/packages/crypto-rpc/package.json b/packages/crypto-rpc/package.json index cdd611dbc84..88b6e041480 100644 --- a/packages/crypto-rpc/package.json +++ b/packages/crypto-rpc/package.json @@ -59,9 +59,9 @@ }, "lavamoat": { "allowScripts": { - "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1#1.1.7": false, - "hardhat>keccak#3.0.4": false, - "lightning>@grpc/proto-loader>protobufjs#7.5.4": false + "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "hardhat>keccak": false, + "lightning>@grpc/proto-loader>protobufjs": false } } } diff --git a/packages/crypto-wallet-core/package.json b/packages/crypto-wallet-core/package.json index 0eddb550b62..86c3b85c2f7 100644 --- a/packages/crypto-wallet-core/package.json +++ b/packages/crypto-wallet-core/package.json @@ -54,7 +54,7 @@ "gitHead": "e091d99915d099863ad3e78dbe867aa7780191e4", "lavamoat": { "allowScripts": { - "xrpl>bip32>tiny-secp256k1#1.1.7": false + "xrpl>bip32>tiny-secp256k1": false } } } From e6bcb6fc65b397b9dfa0c59ec3269e971d572ab3 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Fri, 31 Jul 2026 09:45:53 -0400 Subject: [PATCH 13/17] fix os-specific validation failures --- DEVELOPMENT.md | 13 ++- plan-allowed-scripts.js | 21 ++-- test/validate-and-run-allowed-scripts.test.js | 105 ++++++++++++++++++ validate-and-run-allowed-scripts.sh | 5 +- 4 files changed, 132 insertions(+), 12 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 29090cac4ed..465e2fbf8e0 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -162,7 +162,12 @@ After bootstrap, the repository runs: npm run lifecycle:approved ``` -The underlying script first runs `allow-scripts check` from each Lerna-managed child package directory. +The underlying script first runs `allow-scripts check` from each Lerna-managed +child package directory. If that strict check fails only because a denied +dependency is not installed on the current platform, the repository planner +confirms that the inactive entries are all set to `false` and reports a +non-fatal warning. This permits one policy to deny macOS-only dependencies such +as `fsevents` while also validating on Linux. Each package has its own: @@ -179,9 +184,13 @@ A validation failure generally means one of the following: * a dependency with a lifecycle script was added but is not represented in policy; * a dependency path or version changed; -* a committed policy entry no longer matches an installed dependency; +* an approved policy entry no longer matches an installed dependency; * the package lockfile and policy are out of sync. +An inactive denied entry is not a validation failure because it cannot +authorize code. Missing policy entries and inactive approved entries remain +fatal. + Do not bypass this failure by automatically approving new entries. Review the new lifecycle dependency, determine whether its script is necessary, and update policy only after completing the appropriate security and functional review. diff --git a/plan-allowed-scripts.js b/plan-allowed-scripts.js index cbaefc457ba..31d1dd04703 100644 --- a/plan-allowed-scripts.js +++ b/plan-allowed-scripts.js @@ -58,24 +58,27 @@ async function main() { somePoliciesAreMissing } = await loadAllPackageConfigurations({ rootDir: packageDir }); + for (const [pattern, decision] of Object.entries(lifecycle.allowConfig)) { + if (typeof decision !== 'boolean') { + throw new Error( + `${packageName}'s policy decision for ${pattern} must be boolean.` + ); + } + } + + const inactiveApprovedPatterns = lifecycle.excessPolicies.filter( + pattern => lifecycle.allowConfig[pattern] === true + ); if ( somePoliciesAreMissing || lifecycle.missingPolicies.length > 0 || - lifecycle.excessPolicies.length > 0 + inactiveApprovedPatterns.length > 0 ) { throw new Error( `${packageName}'s lifecycle policy changed after validation.` ); } - for (const [pattern, decision] of Object.entries(lifecycle.allowConfig)) { - if (typeof decision !== 'boolean') { - throw new Error( - `${packageName}'s policy decision for ${pattern} must be boolean.` - ); - } - } - const approvedPaths = new Set(); for (const pattern of lifecycle.allowedPatterns) { const matchingPackages = lifecycle.packagesWithScripts.get(pattern); diff --git a/test/validate-and-run-allowed-scripts.test.js b/test/validate-and-run-allowed-scripts.test.js index 2b479a5cf5f..8bf8e636325 100644 --- a/test/validate-and-run-allowed-scripts.test.js +++ b/test/validate-and-run-allowed-scripts.test.js @@ -206,6 +206,111 @@ test('production planner rejects an implicit node-gyp install hook', () => { assert.match(result.stderr, /binding\.gyp.*unconfigured install hook/); }); +test('production planner accepts an inactive denied policy', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ + name: 'package-with-inactive-denial', + lavamoat: { + allowScripts: { + fsevents: false + } + } + }, null, 2)}\n` + ); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } + ); + + assert.equal(result.status, 0, result.stderr); + assert.equal(result.stdout, ''); +}); + +test('production planner rejects an inactive approved policy', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ + name: 'package-with-inactive-approval', + lavamoat: { + allowScripts: { + 'fsevents#1.2.11': true + } + } + }, null, 2)}\n` + ); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } + ); + + assert.equal(result.status, 1); + assert.match(result.stderr, /lifecycle policy changed after validation/); +}); + +test('accepts inactive denied policies on the current platform', () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [] + } + } + ]); + + const result = runFixture(fixture, { + BITCORE_TEST_FAIL_CHECK: 'package-a' + }); + + assert.equal(result.status, 0, result.stderr); + assert.deepEqual(readLog(fixture.logPath), ['check\tpackage-a']); + assert.match( + result.stdout, + /inactive denied lifecycle policies.*not installed on this platform/ + ); +}); + +test('does not mask a failed check when the planner rejects the package', () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + scripts: { + prepare: 'echo unsafe implicit execution' + }, + testApprovedPaths: [] + } + } + ]); + + const result = runFixture(fixture, { + BITCORE_TEST_FAIL_CHECK: 'package-a' + }); + + assert.equal(result.status, 1); + assert.deepEqual(readLog(fixture.logPath), [ + 'check\tpackage-a', + 'list\tpackage-a' + ]); + assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); + assert.match(result.stdout, /policy validation failed for 1 package/); + assert.match(result.stdout, /Approved lifecycle scripts were not executed/); +}); + test('executes a shared physical approved path only once', () => { const sharedDependency = fs.mkdtempSync( path.join(os.tmpdir(), 'bitcore-shared-dependency-') diff --git a/validate-and-run-allowed-scripts.sh b/validate-and-run-allowed-scripts.sh index ec7c632bf2b..160edccb8ed 100755 --- a/validate-and-run-allowed-scripts.sh +++ b/validate-and-run-allowed-scripts.sh @@ -107,9 +107,12 @@ while IFS= read -r package_dir; do if ( cd "$package_dir" && - "$ALLOW_SCRIPTS" check + "$ALLOW_SCRIPTS" check > /dev/null ); then echo "PASS: $package_name" + elif node "$PLAN_ALLOWED_SCRIPTS" "$package_dir" > /dev/null; then + echo "WARN: $package_name has inactive denied lifecycle policies that are not installed on this platform." + echo "PASS: $package_name" else check_failures=$((check_failures + 1)) From cabde5b98d9563635fbeff49cffbea18f46c2095 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 3 Aug 2026 10:35:33 -0400 Subject: [PATCH 14/17] review fixes --- DEVELOPMENT.md | 98 +- lifecycle-plan-coordinator.js | 520 +++++++ package.json | 9 +- packages/bitcore-client/package.json | 1 + packages/bitcore-node/Dockerfile | 2 +- packages/bitcore-node/package.json | 1 + packages/bitcore-wallet-service/Dockerfile | 2 +- plan-allowed-scripts.js | 260 +++- run-allowed-scripts.js | 167 +++ test/lerna-exec-contract.test.js | 407 +++++ test/validate-and-run-allowed-scripts.test.js | 1323 ++++++++++++++++- validate-and-run-allowed-scripts.sh | 306 ++-- 12 files changed, 2765 insertions(+), 331 deletions(-) create mode 100644 lifecycle-plan-coordinator.js create mode 100644 run-allowed-scripts.js create mode 100644 test/lerna-exec-contract.test.js diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 465e2fbf8e0..2b4e44d8f4f 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -65,12 +65,18 @@ The root scripts are: ```json { "setup": "npm ci --ignore-scripts && npm run setup:installed", - "setup:installed": "npm run bootstrap:inert && npm run lifecycle:approved && npm run compile", + "setup:installed": "npm run bootstrap:inert && npm run allow-scripts:run && npm run compile", "bootstrap:inert": "npm_config_ignore_scripts=true lerna bootstrap", - "lifecycle:approved": "./validate-and-run-allowed-scripts.sh" + "allow-scripts:config": "lerna exec --concurrency 1 -- \"$PWD/node_modules/.bin/allow-scripts\" auto --skip-versions", + "allow-scripts:check": "./validate-and-run-allowed-scripts.sh --check-only", + "allow-scripts:run": "./validate-and-run-allowed-scripts.sh", + "lifecycle:approved": "npm run allow-scripts:run" } ``` +`lifecycle:approved` remains as a compatibility alias. New automation and +documentation should use the `allow-scripts:*` names. + ## Why `npm ci` is not enough Historically, the root `postinstall` script automatically bootstrapped and compiled the repository after installation. @@ -159,7 +165,7 @@ The repository intentionally does not expose an unguarded `bootstrap` npm script After bootstrap, the repository runs: ```sh -npm run lifecycle:approved +npm run allow-scripts:run ``` The underlying script first runs `allow-scripts check` from each Lerna-managed @@ -220,6 +226,17 @@ all-or-nothing validation boundary. Trusted first-party setup work belongs in an explicit root npm script, not in a workspace lifecycle hook. +To perform the same validation and planning without executing dependency +lifecycle scripts, run: + +```sh +npm run allow-scripts:check +``` + +This is useful after updating policy, during review, or as a separate CI gate. +It validates every managed package and the deduplicated execution plan, then +stops before `allow-scripts run` is invoked. + ### Approved dependency lifecycle execution Once validation and planning succeed, the runner invokes: @@ -356,20 +373,27 @@ When adding, removing, or updating a dependency: 1. Update the appropriate package manifest and lockfile. 2. Perform an inert installation or bootstrap. -3. Run the package's `allow-scripts list` and `allow-scripts check`. -4. Review any new or changed lifecycle dependency paths. -5. Keep new entries denied unless real Bitcore build, test, runtime, or CLI behavior proves that the lifecycle-produced artifact is required. -6. Approve one exact path-sensitive key at a time. -7. Rerun the failing first-party behavior. -8. Reproduce the result from a clean installation. -9. Confirm platform-dependent results in Linux CI. +3. Run `npm run allow-scripts:config` to add newly discovered lifecycle paths + as versionless denials. +4. Review every resulting `package.json` change and inspect affected packages + with `allow-scripts list` where necessary. +5. Keep new entries denied unless real Bitcore build, test, runtime, or CLI + behavior proves that the lifecycle-produced artifact is required. +6. For a required script, retain its versionless denial as the default and add + one exact, versioned, path-sensitive approval. +7. Run `npm run allow-scripts:check`. +8. Rerun the failing first-party behavior through `npm run allow-scripts:run`. +9. Reproduce the result from a clean installation. +10. Confirm platform-dependent results in Linux CI. ### Policy versioning Use a hybrid versioning policy for `lavamoat.allowScripts`: * Entries set to `true` must include the exact reviewed dependency version. -* Entries set to `false` may omit the final `#version` suffix. +* Entries set to `false` omit the final `#version` suffix. +* An approved dependency may have both a versionless `false` baseline and an + exact versioned `true` exception. For example: @@ -379,7 +403,9 @@ For example: "allowScripts": { "secp256k1": false, "@bitpay-labs/crypto-wallet-core>tiny-secp256k1": false, + "bcrypt": false, "bcrypt#5.1.0": true, + "@bitpay-labs/bitcore-client>bcrypt": false, "@bitpay-labs/bitcore-client>bcrypt#5.1.0": true } } @@ -394,19 +420,47 @@ causes validation to fail. An approved entry remains version-pinned so an unreviewed future release cannot inherit permission to execute lifecycle code. -Do not use `--skip-versions` with `allow-scripts auto`, `check`, or `run`. -That option changes version matching globally, including approved entries, and -using it for configuration but not execution creates incompatible policies. -Convert existing denied entries to versionless keys as a deliberate, -reviewable manifest change while leaving every approved entry pinned. +The developer-only configuration command runs `allow-scripts auto +--skip-versions` in each managed package. In this mode, `allow-scripts` adds +newly detected lifecycle paths as versionless `false` entries. It does not +grant permission to execute them. It may add a versionless denial alongside an +existing pinned approval; that is the expected default-deny plus exact-exception +representation. -Do not run repository-wide: +Validation and execution deliberately do not pass `--skip-versions`. Normal +matching recognizes versionless `false` entries but requires a `true` entry to +match the installed version exactly. Never change a generated versionless +denial to `true`, and never run `allow-scripts run --skip-versions`, because +that would make approval version-agnostic. + +`allow-scripts:config` is a maintenance command, not part of `setup` or CI. It +updates tracked manifests, so always review its diff. CI must report missing or +stale policy instead of modifying policy automatically. + +### Why configuration iterates Lerna packages + +`allow-scripts` inspects the dependency tree and `package.json` in its current +working directory. Running it once from the repository root would inspect only +the root dependency tree, not the 18 separately bootstrapped child trees. +Package-by-package execution is therefore necessary. + +A command such as: ```sh -allow-scripts auto +lerna exec -- npx allow-scripts auto --skip-versions ``` -as a substitute for review. +is a concise way to enter every Lerna package, which is why it may be suggested. +The Lerna part solves a real package-scoping problem; `npx` is unnecessary and +less deterministic here. If a suitable local binary is not found, `npx` can +resolve or download a different package/version rather than guaranteeing the +one in the root lockfile. + +The committed npm command keeps Lerna's authoritative package scope but passes +it an absolute path to the root `node_modules/.bin/allow-scripts` executable. +The npm shell expands `$PWD` before Lerna enters each package, guaranteeing the +root-lockfile version. `--concurrency 1` keeps policy updates and output serial. +No additional orchestration script is required. Do not approve lifecycle scripts merely because a package declares one or because installation reports an unconfigured entry. @@ -468,10 +522,10 @@ compilation. ### `allow-scripts - allowlist needs update` -Run the lifecycle command to identify every failing package: +Run the non-executing lifecycle check to identify every failing package: ```sh -npm run lifecycle:approved +npm run allow-scripts:check ``` The validation phase will print the current lifecycle inventory for each package whose policy does not match its installed tree. @@ -496,7 +550,7 @@ This indicates that the approved `bcrypt#5.1.0` lifecycle script did not run suc Run: ```sh -npm run lifecycle:approved +npm run allow-scripts:run ``` Then confirm the generated native binding exists: diff --git a/lifecycle-plan-coordinator.js b/lifecycle-plan-coordinator.js new file mode 100644 index 00000000000..6cd70ef69ce --- /dev/null +++ b/lifecycle-plan-coordinator.js @@ -0,0 +1,520 @@ +#!/usr/bin/env node + +'use strict'; + +/* eslint-disable @typescript-eslint/no-require-imports */ + +// Establish the closed Lerna package inventory and validate the complete set +// of per-package lifecycle-plan artifacts. This script never runs lifecycle +// scripts or invokes commands in package directories. + +const { spawn, spawnSync } = require('node:child_process'); +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); + +const ARTIFACT_SCHEMA_VERSION = 1; +const INVENTORY_SCHEMA_VERSION = 1; + +function isContainedBy(rootDir, candidate) { + const relative = path.relative(rootDir, candidate); + return relative !== '' && relative !== '..' && + !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative); +} + +function artifactNameForPackage(packageName) { + return `${crypto.createHash('sha256').update(packageName).digest('hex')}.json`; +} + +function parseDiscoveryOutput(rootDirArgument, output) { + const rootDir = fs.realpathSync(rootDirArgument); + let discovered; + try { + discovered = JSON.parse(output); + } catch (error) { + throw new Error(`Lerna discovery output is not valid JSON: ${error.message}`); + } + + if (!Array.isArray(discovered) || discovered.length === 0) { + throw new Error('Lerna discovery output must be a non-empty JSON array.'); + } + + const names = new Set(); + const locations = new Set(); + const packages = discovered.map((entry, index) => { + if (!entry || typeof entry !== 'object' || Array.isArray(entry) || + typeof entry.name !== 'string' || entry.name.length === 0 || + typeof entry.location !== 'string' || entry.location.length === 0) { + throw new Error( + `Lerna discovery entry ${index} must contain non-empty name and location fields.` + ); + } + if (entry.name.includes('\n') || entry.location.includes('\n')) { + throw new Error(`Lerna discovery entry ${index} contains a newline.`); + } + + let location; + try { + location = fs.realpathSync(path.resolve(rootDir, entry.location)); + } catch (error) { + throw new Error( + `Lerna package ${entry.name} has an invalid location: ${error.message}` + ); + } + if (!isContainedBy(rootDir, location)) { + throw new Error( + `Lerna package ${entry.name} is outside the repository: ${location}` + ); + } + if (names.has(entry.name)) { + throw new Error(`Lerna discovery contains duplicate package name ${entry.name}.`); + } + if (locations.has(location)) { + throw new Error( + `Lerna discovery contains duplicate package location ${location}.` + ); + } + names.add(entry.name); + locations.add(location); + return { name: entry.name, location }; + }); + + const insightLocation = path.join(rootDir, 'packages', 'insight'); + if (packages.some(packageEntry => packageEntry.location === insightLocation)) { + throw new Error('Lerna discovery unexpectedly included excluded packages/insight.'); + } + + return { schemaVersion: INVENTORY_SCHEMA_VERSION, packages }; +} + +function discoverPackages(rootDir, lernaExecutable) { + const result = spawnSync( + lernaExecutable, + ['list', '--all', '--json', '--loglevel', 'silent'], + { cwd: rootDir, encoding: 'utf8', maxBuffer: 10 * 1024 * 1024 } + ); + if (result.error) { + throw new Error(`Unable to run Lerna discovery: ${result.error.message}`); + } + if (result.status !== 0) { + throw new Error( + `Lerna discovery failed with status ${result.status}: ${result.stderr.trim()}` + ); + } + return parseDiscoveryOutput(rootDir, result.stdout); +} + +function readInventory(inventoryPath) { + let inventory; + try { + inventory = JSON.parse(fs.readFileSync(inventoryPath, 'utf8')); + } catch (error) { + throw new Error(`Managed-package inventory is invalid: ${error.message}`); + } + if (!inventory || typeof inventory !== 'object' || Array.isArray(inventory) || + inventory.schemaVersion !== INVENTORY_SCHEMA_VERSION || + !Array.isArray(inventory.packages) || inventory.packages.length === 0) { + throw new Error('Managed-package inventory has an unsupported shape.'); + } + return inventory; +} + +function validateArtifact(artifact, expectedPackage) { + const expectedKeys = [ + 'approvedPaths', + 'packageDir', + 'packageName', + 'schemaVersion', + 'status' + ]; + if (!artifact || typeof artifact !== 'object' || Array.isArray(artifact) || + Object.keys(artifact).sort().join('\0') !== expectedKeys.join('\0') || + artifact.schemaVersion !== ARTIFACT_SCHEMA_VERSION || + artifact.status !== 'validated' || !Array.isArray(artifact.approvedPaths)) { + throw new Error(`Lifecycle plan for ${expectedPackage.name} is malformed.`); + } + if (artifact.packageName !== expectedPackage.name) { + throw new Error( + `Lifecycle plan package-name mismatch: expected ${expectedPackage.name}, ` + + `received ${String(artifact.packageName)}.` + ); + } + if (artifact.packageDir !== expectedPackage.location) { + throw new Error( + `Lifecycle plan package-location mismatch for ${expectedPackage.name}: ` + + `expected ${expectedPackage.location}, received ${String(artifact.packageDir)}.` + ); + } + + const seenPaths = new Set(); + for (const approvedPath of artifact.approvedPaths) { + let canonicalPath; + try { + canonicalPath = typeof approvedPath === 'string' && approvedPath.length > 0 && + path.isAbsolute(approvedPath) && !approvedPath.includes('\n') + ? fs.realpathSync(approvedPath) + : null; + } catch { + canonicalPath = null; + } + if (canonicalPath !== approvedPath) { + throw new Error( + `Lifecycle plan for ${expectedPackage.name} contains a non-canonical path.` + ); + } + if (seenPaths.has(approvedPath)) { + throw new Error( + `Lifecycle plan for ${expectedPackage.name} contains a duplicate approved path.` + ); + } + seenPaths.add(approvedPath); + } +} + +function validateArtifactSet(inventory, planDirectoryArgument) { + const planDirectory = fs.realpathSync(planDirectoryArgument); + const expectedByFilename = new Map(); + for (const packageEntry of inventory.packages) { + expectedByFilename.set(artifactNameForPackage(packageEntry.name), packageEntry); + } + + const files = fs.readdirSync(planDirectory); + const seenPackageNames = new Set(); + const artifacts = new Map(); + for (const filename of files) { + const artifactPath = path.join(planDirectory, filename); + const stat = fs.lstatSync(artifactPath); + if (!stat.isFile() || stat.isSymbolicLink()) { + throw new Error(`Unexpected lifecycle plan artifact ${filename}.`); + } + + let artifact; + try { + artifact = JSON.parse(fs.readFileSync(artifactPath, 'utf8')); + } catch (error) { + throw new Error(`Lifecycle plan artifact ${filename} is malformed: ${error.message}`); + } + if (artifact && typeof artifact.packageName === 'string') { + if (seenPackageNames.has(artifact.packageName)) { + throw new Error(`Duplicate lifecycle plan artifacts for ${artifact.packageName}.`); + } + seenPackageNames.add(artifact.packageName); + } + + const expectedPackage = expectedByFilename.get(filename); + if (!expectedPackage) { + throw new Error(`Unexpected lifecycle plan artifact ${filename}.`); + } + validateArtifact(artifact, expectedPackage); + artifacts.set(expectedPackage.name, artifact); + } + + for (const expectedPackage of inventory.packages) { + if (!artifacts.has(expectedPackage.name)) { + throw new Error(`Missing lifecycle plan artifact for ${expectedPackage.name}.`); + } + } + return inventory.packages.map(packageEntry => artifacts.get(packageEntry.name)); +} + +function setsOverlap(left, right) { + const rightPaths = new Set(right); + return left.some(approvedPath => rightPaths.has(approvedPath)); +} + +function buildGlobalPlan(inventory, artifacts) { + if (artifacts.length !== inventory.packages.length || + artifacts.some((artifact, index) => + artifact.packageName !== inventory.packages[index].name || + artifact.packageDir !== inventory.packages[index].location + )) { + throw new Error('Artifact collection does not match the package inventory.'); + } + const groupsByKey = new Map(); + const packagePlans = artifacts.map(artifact => ({ + name: artifact.packageName, + location: artifact.packageDir, + approvedPaths: [...artifact.approvedPaths].sort(), + selected: false + })); + + for (const packagePlan of packagePlans) { + if (packagePlan.approvedPaths.length === 0) { + continue; + } + const key = JSON.stringify(packagePlan.approvedPaths); + let group = groupsByKey.get(key); + if (!group) { + group = { + approvedPaths: packagePlan.approvedPaths, + packageNames: [], + representative: { + name: packagePlan.name, + location: packagePlan.location + } + }; + groupsByKey.set(key, group); + packagePlan.selected = true; + } + group.packageNames.push(packagePlan.name); + } + + const groups = Array.from(groupsByKey.values()); + for (let leftIndex = 0; leftIndex < groups.length; leftIndex += 1) { + for (let rightIndex = leftIndex + 1; rightIndex < groups.length; + rightIndex += 1) { + const left = groups[leftIndex]; + const right = groups[rightIndex]; + if (setsOverlap(left.approvedPaths, right.approvedPaths)) { + throw new Error( + `${right.representative.name} has a partial overlap with ` + + `${left.representative.name}'s approved paths.` + ); + } + } + } + + const selectedPackages = packagePlans + .filter(packagePlan => packagePlan.selected) + .map(packagePlan => ({ + name: packagePlan.name, + location: packagePlan.location + })); + validateGlobalPlan(packagePlans, groups, selectedPackages); + return { + schemaVersion: 1, + packages: packagePlans, + groups, + selectedPackages + }; +} + +function validateGlobalPlan(packagePlans, groups, selectedPackages) { + const selectedNames = new Set( + selectedPackages.map(packageEntry => packageEntry.name) + ); + if (selectedNames.size !== selectedPackages.length) { + throw new Error('The global lifecycle plan selects a package more than once.'); + } + + const pathOwners = new Map(); + const representativeNames = new Set(); + for (const group of groups) { + if (group.approvedPaths.length === 0 || group.packageNames.length === 0 || + !group.packageNames.includes(group.representative.name) || + !selectedNames.has(group.representative.name)) { + throw new Error('The global lifecycle plan contains an invalid group.'); + } + if (representativeNames.has(group.representative.name)) { + throw new Error('A package represents multiple lifecycle groups.'); + } + representativeNames.add(group.representative.name); + for (const approvedPath of group.approvedPaths) { + if (pathOwners.has(approvedPath)) { + throw new Error( + `Approved path ${approvedPath} belongs to multiple lifecycle groups.` + ); + } + pathOwners.set(approvedPath, group.representative.name); + } + } + if (representativeNames.size !== selectedNames.size || + Array.from(selectedNames).some(name => !representativeNames.has(name))) { + throw new Error( + 'The selected packages do not match the lifecycle group representatives.' + ); + } + for (const selectedPackage of selectedPackages) { + const packagePlan = packagePlans.find( + candidate => candidate.name === selectedPackage.name + ); + const group = groups.find( + candidate => candidate.representative.name === selectedPackage.name + ); + if (!packagePlan || !group || !packagePlan.selected || + packagePlan.approvedPaths.length === 0 || + packagePlan.location !== selectedPackage.location || + group.representative.location !== selectedPackage.location) { + throw new Error( + `Selected package ${selectedPackage.name} has an invalid identity.` + ); + } + } + + for (const packagePlan of packagePlans) { + if (packagePlan.selected !== selectedNames.has(packagePlan.name) || + (packagePlan.approvedPaths.length === 0 && packagePlan.selected)) { + throw new Error( + `The global lifecycle plan has an invalid selection for ${packagePlan.name}.` + ); + } + if (packagePlan.approvedPaths.some( + approvedPath => !pathOwners.has(approvedPath) + )) { + throw new Error( + `The global lifecycle plan omitted an approved path for ${packagePlan.name}.` + ); + } + if (packagePlan.approvedPaths.length > 0) { + const matchingGroups = groups.filter(group => + group.approvedPaths.length === packagePlan.approvedPaths.length && + group.approvedPaths.every( + (approvedPath, index) => approvedPath === packagePlan.approvedPaths[index] + ) && group.packageNames.includes(packagePlan.name) + ); + if (matchingGroups.length !== 1) { + throw new Error( + `${packagePlan.name} does not belong to exactly one lifecycle group.` + ); + } + } + } +} + +function readGlobalPlan(globalPlanPath) { + const globalPlan = JSON.parse(fs.readFileSync(globalPlanPath, 'utf8')); + if (!globalPlan || typeof globalPlan !== 'object' || + globalPlan.schemaVersion !== 1 || !Array.isArray(globalPlan.packages) || + !Array.isArray(globalPlan.groups) || + !Array.isArray(globalPlan.selectedPackages)) { + throw new Error('The global lifecycle plan artifact is malformed.'); + } + return globalPlan; +} + +function exactScopePattern(packageName) { + return packageName.replace(/([*?[\]{}()!+@\\])/g, '\\$1'); +} + +function buildExecutionArgs(selectedPackages) { + if (selectedPackages.length === 0) { + return null; + } + const args = ['exec', '--concurrency', '1', '--stream']; + for (const packageEntry of selectedPackages) { + args.push('--scope', exactScopePattern(packageEntry.name)); + } + args.push('--', 'node', '"$BITCORE_LIFECYCLE_RUN_WRAPPER"'); + return args; +} + +async function executeGlobalPlan( + globalPlan, + rootDir, + lernaExecutable, + executionWrapper +) { + const args = buildExecutionArgs(globalPlan.selectedPackages); + if (!args) { + console.log('No approved dependency lifecycle scripts were required.'); + return 0; + } + + const child = spawn(lernaExecutable, args, { + cwd: rootDir, + env: { + ...process.env, + BITCORE_LIFECYCLE_RUN_WRAPPER: executionWrapper + }, + stdio: 'inherit' + }); + let requestedSignal; + const signalHandlers = new Map(); + for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { + const handler = () => { + if (!requestedSignal) { + requestedSignal = signal; + child.kill(signal); + } + }; + signalHandlers.set(signal, handler); + process.on(signal, handler); + } + + const result = await new Promise((resolve, reject) => { + child.once('error', reject); + child.once('close', (code, signal) => resolve({ code, signal })); + }); + for (const [signal, handler] of signalHandlers) { + process.off(signal, handler); + } + if (requestedSignal) { + return { SIGHUP: 129, SIGINT: 130, SIGTERM: 143 }[requestedSignal]; + } + if (result.signal) { + return { SIGHUP: 129, SIGINT: 130, SIGTERM: 143 }[result.signal] || 1; + } + return result.code ?? 1; +} + +async function main() { + const [command, ...args] = process.argv.slice(2); + if (command === 'discover' && args.length === 2) { + process.stdout.write(`${JSON.stringify(discoverPackages(args[0], args[1]))}\n`); + return; + } + if (command === 'count' && args.length === 1) { + process.stdout.write(`${readInventory(args[0]).packages.length}\n`); + return; + } + if (command === 'global-plan' && args.length === 2) { + const inventory = readInventory(args[0]); + const artifacts = validateArtifactSet(inventory, args[1]); + process.stdout.write(`${JSON.stringify(buildGlobalPlan(inventory, artifacts))}\n`); + return; + } + if (command === 'report' && args.length === 1) { + const globalPlan = readGlobalPlan(args[0]); + for (const packagePlan of globalPlan.packages) { + if (packagePlan.approvedPaths.length === 0) { + console.log( + `SKIP: ${packagePlan.name} has no approved dependency lifecycle scripts.\n` + ); + } else if (packagePlan.selected) { + console.log( + `PLAN: Run approved dependency lifecycle scripts for ${packagePlan.name}.\n` + ); + } else { + console.log( + `SKIP: ${packagePlan.name}'s approved dependency scripts are already planned.\n` + ); + } + } + return; + } + if (command === 'execute' && args.length === 4) { + const globalPlan = readGlobalPlan(args[0]); + const status = await executeGlobalPlan( + globalPlan, + args[1], + args[2], + args[3] + ); + process.exitCode = status; + return; + } + throw new Error( + 'Usage: lifecycle-plan-coordinator.js ' + + 'discover ROOT LERNA | count INVENTORY | ' + + 'global-plan INVENTORY PLAN_DIR | report GLOBAL_PLAN | ' + + 'execute GLOBAL_PLAN ROOT LERNA WRAPPER' + ); +} + +if (require.main === module) { + main().catch(error => { + console.error(`ERROR: ${error.message}`); + process.exitCode = 1; + }); +} + +module.exports = { + artifactNameForPackage, + buildExecutionArgs, + buildGlobalPlan, + exactScopePattern, + executeGlobalPlan, + parseDiscoveryOutput, + validateArtifactSet, + validateGlobalPlan +}; diff --git a/package.json b/package.json index 65cebe9a5a3..e322d0f276e 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,12 @@ "build:docker": "lerna run build:docker --concurrency 1 --stream", "watch": "lerna run watch --parallel", "setup": "npm ci --ignore-scripts && npm run setup:installed", - "setup:installed": "npm run bootstrap:inert && npm run lifecycle:approved && npm run compile", + "setup:installed": "npm run bootstrap:inert && npm run allow-scripts:run && npm run compile", "bootstrap:inert": "npm_config_ignore_scripts=true lerna bootstrap", - "lifecycle:approved": "./validate-and-run-allowed-scripts.sh", + "allow-scripts:config": "lerna exec --concurrency 1 -- \"$PWD/node_modules/.bin/allow-scripts\" auto --skip-versions", + "allow-scripts:check": "./validate-and-run-allowed-scripts.sh --check-only", + "allow-scripts:run": "./validate-and-run-allowed-scripts.sh", + "lifecycle:approved": "npm run allow-scripts:run", "compile": "npm run compile:bitcore-node-prereqs && npm run compile:bitcore-node-prod && npm run compile:remaining && npm run compile:bitcore-node", "insight:build": "cd ./packages/insight && npm i && npm run build", "node": "cd packages/bitcore-node && npm start", @@ -16,7 +19,7 @@ "compile:bitcore-node-prod": "npm --prefix packages/bitcore-node run clean && npm --prefix packages/bitcore-node run build:prod", "compile:remaining": "lerna run compile --ignore @bitpay-labs/bitcore-node --ignore @bitpay-labs/bitcore-logging --ignore @bitpay-labs/crypto-wallet-core", "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node", - "test:lifecycle-runner": "node --test test/validate-and-run-allowed-scripts.test.js", + "test:lifecycle-runner": "node --test test/validate-and-run-allowed-scripts.test.js test/lerna-exec-contract.test.js", "lint": "eslint .", "fix:errors": "eslint --fix --quiet .", "fix:all": "eslint --fix .", diff --git a/packages/bitcore-client/package.json b/packages/bitcore-client/package.json index ab7e2b8bb52..e7337ed1ce4 100644 --- a/packages/bitcore-client/package.json +++ b/packages/bitcore-client/package.json @@ -71,6 +71,7 @@ "lavamoat": { "allowScripts": { "@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, + "bcrypt": false, "bcrypt#5.1.0": true, "leveldown": false, "secp256k1": false, diff --git a/packages/bitcore-node/Dockerfile b/packages/bitcore-node/Dockerfile index d7752bd70b9..209668e54d0 100644 --- a/packages/bitcore-node/Dockerfile +++ b/packages/bitcore-node/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /bitcore # NOTE(danny): not the most optimal layering, but it works for now COPY lerna.json ./ COPY package*.json ./ -COPY plan-allowed-scripts.js validate-and-run-allowed-scripts.sh ./ +COPY lifecycle-plan-coordinator.js plan-allowed-scripts.js run-allowed-scripts.js validate-and-run-allowed-scripts.sh ./ COPY packages/ ./packages/ # Install dependencies and build diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index 8d2ddffc442..431f83abfdc 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -107,6 +107,7 @@ "gitHead": "a1890ef287c9e5d0e966fb445d15bc59a9393761", "lavamoat": { "allowScripts": { + "@bitpay-labs/bitcore-client>bcrypt": false, "@bitpay-labs/bitcore-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, "@bitpay-labs/bitcore-client>bcrypt#5.1.0": true, "@bitpay-labs/bitcore-client>leveldown": false, diff --git a/packages/bitcore-wallet-service/Dockerfile b/packages/bitcore-wallet-service/Dockerfile index fc52e1347c1..e8b2e6d2374 100644 --- a/packages/bitcore-wallet-service/Dockerfile +++ b/packages/bitcore-wallet-service/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /bitcore # NOTE(danny): not the most optimal layering, but it works for now COPY lerna.json ./ COPY package*.json ./ -COPY plan-allowed-scripts.js validate-and-run-allowed-scripts.sh ./ +COPY lifecycle-plan-coordinator.js plan-allowed-scripts.js run-allowed-scripts.js validate-and-run-allowed-scripts.sh ./ COPY packages/ ./packages/ # Install dependencies and build diff --git a/plan-allowed-scripts.js b/plan-allowed-scripts.js index 31d1dd04703..30753b4282a 100644 --- a/plan-allowed-scripts.js +++ b/plan-allowed-scripts.js @@ -2,20 +2,21 @@ 'use strict'; -// Build a fail-closed lifecycle-script plan for one workspace package. Given -// the package directory on the command line, this verifies that its LavaMoat -// policy is complete and unambiguous, rejects top-level hooks that -// allow-scripts could run outside that policy, and prints each uniquely -// approved dependency's real path (one per line) for the repository runner to -// deduplicate before execution. -// -// This script only plans +/* eslint-disable @typescript-eslint/no-require-imports */ + +// Build a fail-closed lifecycle-script plan for one workspace package. In a +// Lerna child, this writes one structured artifact for the root coordinator. +// // THIS SCRIPT NEVER RUNS LIFECYCLE SCRIPTS ITSELF. +const crypto = require('node:crypto'); const fs = require('node:fs'); const path = require('node:path'); const { loadAllPackageConfigurations } = require('@lavamoat/allow-scripts'); +const ARTIFACT_SCHEMA_VERSION = 1; +const PLAN_DIRECTORY_ENV = 'BITCORE_LIFECYCLE_PLAN_DIR'; + const IMPLICIT_TOP_LEVEL_EVENTS = [ 'install', 'postinstall', @@ -23,16 +24,156 @@ const IMPLICIT_TOP_LEVEL_EVENTS = [ 'prepare' ]; -async function main() { - const packageDirArgument = process.argv[2]; - if (!packageDirArgument) { - throw new Error('A package directory is required.'); +function readPackageJson(packageDir) { + const packageJsonPath = path.join(packageDir, 'package.json'); + return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); +} + +function artifactNameForPackage(packageName) { + return `${crypto.createHash('sha256').update(packageName).digest('hex')}.json`; +} + +function validatePackageIdentity(packageName, packageDir) { + if (typeof packageName !== 'string' || packageName.length === 0) { + throw new Error(`${packageDir} does not define a non-empty package name.`); + } + + const lernaPackageName = process.env.LERNA_PACKAGE_NAME; + if (process.env[PLAN_DIRECTORY_ENV] && !lernaPackageName) { + throw new Error( + 'LERNA_PACKAGE_NAME is required when writing a plan artifact.' + ); + } + if (lernaPackageName && lernaPackageName !== packageName) { + throw new Error( + `Lerna package identity mismatch: expected ${packageName}, received ` + + `${lernaPackageName}.` + ); + } + + const lernaRootPath = process.env.LERNA_ROOT_PATH; + if (process.env[PLAN_DIRECTORY_ENV] && !lernaRootPath) { + throw new Error('LERNA_ROOT_PATH is required when writing a plan artifact.'); + } + if (lernaRootPath) { + const rootDir = fs.realpathSync(lernaRootPath); + const relativePackageDir = path.relative(rootDir, packageDir); + if ( + relativePackageDir === '' || + relativePackageDir === '..' || + relativePackageDir.startsWith(`..${path.sep}`) || + path.isAbsolute(relativePackageDir) + ) { + throw new Error(`${packageName} is not contained by LERNA_ROOT_PATH.`); + } + } +} + +function validatePolicyDecisions(packageName, packageJson) { + const allowConfig = packageJson.lavamoat?.allowScripts || {}; + for (const [pattern, decision] of Object.entries(allowConfig)) { + if (typeof decision !== 'boolean') { + throw new Error( + `${packageName}'s policy decision for ${pattern} must be boolean.` + ); + } + if (decision && !pattern.includes('#')) { + throw new Error( + `${packageName}'s approval for ${pattern} must include a version.` + ); + } + } +} + +function hasInvalidPackageEntries(packagesWithScripts) { + for (const [pattern, packages] of packagesWithScripts) { + if (typeof pattern !== 'string' || !Array.isArray(packages) || + packages.some(packageEntry => + !packageEntry || typeof packageEntry !== 'object' || + typeof packageEntry.path !== 'string' + )) { + return true; + } + } + return false; +} + +function validateConfigurationResult(packageName, result) { + const lifecycle = result?.configs?.lifecycle; + const stringArrayFields = [ + 'allowedPatterns', + 'excessPolicies', + 'missingPolicies' + ]; + if (!result || typeof result !== 'object' || + typeof result.somePoliciesAreMissing !== 'boolean' || + !(result.canonicalNamesByPath instanceof Map) || + !lifecycle || typeof lifecycle !== 'object' || + !lifecycle.allowConfig || typeof lifecycle.allowConfig !== 'object' || + Array.isArray(lifecycle.allowConfig) || + !(lifecycle.packagesWithScripts instanceof Map) || + hasInvalidPackageEntries(lifecycle.packagesWithScripts) || + stringArrayFields.some(field => + !Array.isArray(lifecycle[field]) || + lifecycle[field].some(value => typeof value !== 'string') + ) || + Array.from(result.canonicalNamesByPath.keys()).some( + dependencyPath => typeof dependencyPath !== 'string' + )) { + throw new Error( + `${packageName} received an unsupported ` + + 'loadAllPackageConfigurations result shape.' + ); } + return { + canonicalNamesByPath: result.canonicalNamesByPath, + lifecycle, + somePoliciesAreMissing: result.somePoliciesAreMissing + }; +} +function writeArtifact(planDirectory, artifact) { + const realPlanDirectory = fs.realpathSync(planDirectory); + const artifactPath = path.join( + realPlanDirectory, + artifactNameForPackage(artifact.packageName) + ); + const temporaryPath = path.join( + realPlanDirectory, + `.${artifactNameForPackage(artifact.packageName)}.` + + `${process.pid}.${crypto.randomBytes(16).toString('hex')}.tmp` + ); + try { + fs.writeFileSync(temporaryPath, `${JSON.stringify(artifact)}\n`, { + encoding: 'utf8', + flag: 'wx', + mode: 0o600 + }); + fs.linkSync(temporaryPath, artifactPath); + } catch (error) { + fs.rmSync(temporaryPath, { force: true }); + if (error.code === 'EEXIST') { + const duplicateError = new Error( + `${artifact.packageName} already has a lifecycle plan artifact.` + ); + duplicateError.code = error.code; + throw duplicateError; + } + throw error; + } + fs.unlinkSync(temporaryPath); +} + +async function buildArtifact( + packageDirArgument, + configurationLoader = loadAllPackageConfigurations +) { const packageDir = fs.realpathSync(packageDirArgument); - const packageJsonPath = path.join(packageDir, 'package.json'); - const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); - const packageName = packageJson.name || packageDir; + const packageJson = readPackageJson(packageDir); + const packageName = packageJson.name; + validatePackageIdentity(packageName, packageDir); + validatePolicyDecisions(packageName, packageJson); + const scripts = packageJson.scripts || {}; const implicitTopLevelEvents = IMPLICIT_TOP_LEVEL_EVENTS.filter( event => typeof scripts[event] === 'string' && scripts[event].trim() !== '' @@ -53,22 +194,27 @@ async function main() { ); } + let configurationResult; + try { + configurationResult = await configurationLoader({ rootDir: packageDir }); + } catch (error) { + throw new Error( + `${packageName} could not load its lifecycle configuration: ` + + error.message + ); + } const { - configs: { lifecycle }, + canonicalNamesByPath, + lifecycle, somePoliciesAreMissing - } = await loadAllPackageConfigurations({ rootDir: packageDir }); - - for (const [pattern, decision] of Object.entries(lifecycle.allowConfig)) { - if (typeof decision !== 'boolean') { - throw new Error( - `${packageName}'s policy decision for ${pattern} must be boolean.` - ); - } - } + } = validateConfigurationResult(packageName, configurationResult); const inactiveApprovedPatterns = lifecycle.excessPolicies.filter( pattern => lifecycle.allowConfig[pattern] === true ); + const inactiveDeniedPatterns = lifecycle.excessPolicies.filter( + pattern => lifecycle.allowConfig[pattern] === false + ); if ( somePoliciesAreMissing || lifecycle.missingPolicies.length > 0 || @@ -79,7 +225,19 @@ async function main() { ); } + if (inactiveDeniedPatterns.length > 0) { + console.warn( + `WARN: ${packageName} has inactive denied lifecycle policies that ` + + 'are not installed on this platform.' + ); + } + const approvedPaths = new Set(); + const dependencyTreePaths = new Set( + Array.from(canonicalNamesByPath.keys(), dependencyPath => + fs.realpathSync(dependencyPath) + ) + ); for (const pattern of lifecycle.allowedPatterns) { const matchingPackages = lifecycle.packagesWithScripts.get(pattern); if (!matchingPackages || matchingPackages.length === 0) { @@ -89,6 +247,12 @@ async function main() { } for (const packageWithScripts of matchingPackages) { + if (!packageWithScripts || typeof packageWithScripts.path !== 'string') { + throw new Error( + `${packageName} received an unsupported ` + + 'loadAllPackageConfigurations package entry.' + ); + } const approvedPath = fs.realpathSync(packageWithScripts.path); if (approvedPath.includes('\n')) { throw new Error( @@ -100,16 +264,50 @@ async function main() { `${packageName} resolves multiple approvals to ${approvedPath}.` ); } + if (!dependencyTreePaths.has(approvedPath)) { + throw new Error( + `${packageName} resolved an approved dependency outside its ` + + `expected dependency tree: ${approvedPath}.` + ); + } approvedPaths.add(approvedPath); } } - for (const approvedPath of approvedPaths) { - process.stdout.write(`${approvedPath}\n`); + return { + schemaVersion: ARTIFACT_SCHEMA_VERSION, + status: 'validated', + packageName, + packageDir, + approvedPaths: Array.from(approvedPaths) + }; +} + +async function main() { + const packageDirArgument = process.argv[2]; + if (!packageDirArgument) { + throw new Error('A package directory is required.'); } + + const artifact = await buildArtifact(packageDirArgument); + const planDirectory = process.env[PLAN_DIRECTORY_ENV]; + if (planDirectory) { + writeArtifact(planDirectory, artifact); + console.log(`PASS: ${artifact.packageName}`); + return; + } + +} + +if (require.main === module) { + main().catch(error => { + console.error(`ERROR: ${error.message}`); + process.exitCode = 1; + }); } -main().catch(error => { - console.error(`ERROR: ${error.message}`); - process.exitCode = 1; -}); +module.exports = { + buildArtifact, + validateConfigurationResult, + writeArtifact +}; diff --git a/run-allowed-scripts.js b/run-allowed-scripts.js new file mode 100644 index 00000000000..2f715b29ca9 --- /dev/null +++ b/run-allowed-scripts.js @@ -0,0 +1,167 @@ +#!/usr/bin/env node + +'use strict'; + +/* eslint-disable @typescript-eslint/no-require-imports */ + +// Run allow-scripts in a dedicated process group so interruption can terminate +// the active lifecycle command and all of its descendants. Lerna owns package +// selection, cwd, ordering, concurrency, output, and fail-fast orchestration. + +const { spawn } = require('node:child_process'); +const path = require('node:path'); + +const SIGNAL_STATUS = { + SIGHUP: 129, + SIGINT: 130, + SIGTERM: 143 +}; +const FORCE_KILL_DELAY_MS = 1000; + +function processGroupExists(processGroupId) { + try { + process.kill(-processGroupId, 0); + return true; + } catch (error) { + if (error.code === 'ESRCH') { + return false; + } + throw error; + } +} + +function signalProcessGroup(child, signal) { + if (process.platform === 'win32') { + child.kill(signal); + return; + } + try { + process.kill(-child.pid, signal); + } catch (error) { + if (error.code !== 'ESRCH') { + throw error; + } + } +} + +async function waitForProcessGroupExit(processGroupId, timeoutMs) { + if (process.platform === 'win32') { + return true; + } + const deadline = timeoutMs === undefined ? undefined : Date.now() + timeoutMs; + while (processGroupExists(processGroupId)) { + if (deadline !== undefined && Date.now() >= deadline) { + return false; + } + await new Promise(resolve => setTimeout(resolve, 20)); + } + return true; +} + +async function terminateRemainingProcessGroup(processGroupId, signalAlreadySent) { + if (process.platform === 'win32' || !processGroupExists(processGroupId)) { + return; + } + if (!signalAlreadySent) { + try { + process.kill(-processGroupId, 'SIGTERM'); + } catch (error) { + if (error.code !== 'ESRCH') { + throw error; + } + } + } + if (!await waitForProcessGroupExit( + processGroupId, + FORCE_KILL_DELAY_MS + )) { + try { + process.kill(-processGroupId, 'SIGKILL'); + } catch (error) { + if (error.code !== 'ESRCH') { + throw error; + } + } + await waitForProcessGroupExit(processGroupId); + } +} + +async function runAllowedScripts({ + allowScriptsPath, + cwd = process.cwd(), + env = process.env +}) { + const child = spawn(allowScriptsPath, ['run'], { + cwd, + detached: process.platform !== 'win32', + env, + stdio: 'inherit' + }); + let requestedSignal; + let forceKillTimer; + const signalHandlers = new Map(); + for (const signal of Object.keys(SIGNAL_STATUS)) { + const handler = () => { + if (requestedSignal) { + return; + } + requestedSignal = signal; + signalProcessGroup(child, signal); + forceKillTimer = setTimeout(() => { + signalProcessGroup(child, 'SIGKILL'); + }, FORCE_KILL_DELAY_MS); + }; + signalHandlers.set(signal, handler); + process.on(signal, handler); + } + + const result = await new Promise((resolve, reject) => { + child.once('error', reject); + child.once('close', (code, signal) => resolve({ code, signal })); + }); + if (forceKillTimer) { + clearTimeout(forceKillTimer); + } + await terminateRemainingProcessGroup(child.pid, Boolean(requestedSignal)); + for (const [signal, handler] of signalHandlers) { + process.off(signal, handler); + } + + if (requestedSignal) { + return SIGNAL_STATUS[requestedSignal]; + } + if (result.signal) { + return SIGNAL_STATUS[result.signal] || 1; + } + return result.code ?? 1; +} + +async function main() { + const rootPath = process.env.LERNA_ROOT_PATH; + if (!rootPath) { + throw new Error('LERNA_ROOT_PATH is required.'); + } + const status = await runAllowedScripts({ + allowScriptsPath: path.join( + rootPath, + 'node_modules', + '.bin', + 'allow-scripts' + ) + }); + process.exitCode = status; +} + +if (require.main === module) { + main().catch(error => { + console.error(`ERROR: ${error.message}`); + process.exitCode = 1; + }); +} + +module.exports = { + runAllowedScripts, + signalProcessGroup, + terminateRemainingProcessGroup, + waitForProcessGroupExit +}; diff --git a/test/lerna-exec-contract.test.js b/test/lerna-exec-contract.test.js new file mode 100644 index 00000000000..84af9be5d6f --- /dev/null +++ b/test/lerna-exec-contract.test.js @@ -0,0 +1,407 @@ +'use strict'; + +/* eslint-disable @typescript-eslint/no-require-imports */ + +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { spawn, spawnSync } = require('node:child_process'); +const { afterEach, test } = require('node:test'); +const { exactScopePattern } = require('../lifecycle-plan-coordinator'); + +const REPOSITORY_ROOT = path.resolve(__dirname, '..'); +const LERNA_CLI = path.join(REPOSITORY_ROOT, 'node_modules', 'lerna', 'cli.js'); +const temporaryDirectories = new Set(); +const descendantProcesses = new Set(); +const lernaProcesses = new Set(); + +afterEach(() => { + for (const pid of lernaProcesses) { + try { + process.kill(pid, 'SIGKILL'); + } catch (error) { + if (error.code !== 'ESRCH') { + throw error; + } + } + } + lernaProcesses.clear(); + + for (const pid of descendantProcesses) { + try { + process.kill(pid, 'SIGKILL'); + } catch (error) { + if (error.code !== 'ESRCH') { + throw error; + } + } + } + descendantProcesses.clear(); + + for (const temporaryDirectory of temporaryDirectories) { + fs.rmSync(temporaryDirectory, { force: true, recursive: true }); + } + temporaryDirectories.clear(); +}); + +function writeExecutable(filePath, contents) { + fs.writeFileSync(filePath, contents, { mode: 0o755 }); + fs.chmodSync(filePath, 0o755); +} + +function createFixture(includeSimilarName = false) { + const rootDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-lerna-contract-') + ); + temporaryDirectories.add(rootDir); + + fs.writeFileSync( + path.join(rootDir, 'package.json'), + `${JSON.stringify({ name: 'lerna-contract-fixture', private: true })}\n` + ); + fs.writeFileSync( + path.join(rootDir, 'lerna.json'), + `${JSON.stringify({ + version: '1.0.0', + packages: ['packages/[^insight]*'] + }, null, 2)}\n` + ); + + const packageDefinitions = [ + ['package-a', '@contract/package-a', false], + ['package-b', '@contract/package-b', true], + ['insight', '@contract/insight', false] + ]; + if (includeSimilarName) { + packageDefinitions.push(['package-ab', '@contract/package-ab', false]); + } + for (const [directory, name, isPrivate] of packageDefinitions) { + const packageDir = path.join(rootDir, 'packages', directory); + fs.mkdirSync(packageDir, { recursive: true }); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ name, private: isPrivate, version: '1.0.0' })}\n` + ); + } + + writeExecutable( + path.join(rootDir, 'contract-probe.js'), + `#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); + +const action = process.env.BITCORE_CONTRACT_ACTION; +const packageName = process.env.LERNA_PACKAGE_NAME; + +if (action === 'artifact') { + const artifactName = crypto.createHash('sha256') + .update(packageName) + .digest('hex') + '.json'; + const artifact = { + packageName, + cwd: process.cwd(), + rootPath: process.env.LERNA_ROOT_PATH + }; + fs.writeFileSync( + process.env.BITCORE_CONTRACT_ARTIFACT_DIR + '/' + artifactName, + JSON.stringify(artifact) + '\\n', + { flag: 'wx' } + ); +} else if (action === 'record') { + fs.appendFileSync( + process.env.BITCORE_CONTRACT_LOG, + packageName + '\\n' + ); + if (packageName === process.env.BITCORE_CONTRACT_FAIL_PACKAGE) { + process.exit(Number(process.env.BITCORE_CONTRACT_FAIL_STATUS)); + } +} else if (action === 'signal') { + const { spawn } = require('node:child_process'); + for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { + process.on(signal, () => { + fs.appendFileSync( + process.env.BITCORE_CONTRACT_SIGNAL_LOG, + 'command:' + signal + '\\n' + ); + process.exit(0); + }); + } + const descendant = spawn( + process.execPath, + [process.env.BITCORE_CONTRACT_DESCENDANT_PROBE], + { + env: process.env, + stdio: 'ignore' + } + ); + fs.writeFileSync( + process.env.BITCORE_CONTRACT_READY, + JSON.stringify({ commandPid: process.pid, descendantPid: descendant.pid }) + ); + setInterval(() => {}, 1000); +} else { + throw new Error('Unknown contract probe action: ' + action); +} +` + ); + + writeExecutable( + path.join(rootDir, 'descendant-probe.js'), + `#!/usr/bin/env node +'use strict'; + +const fs = require('node:fs'); +for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { + process.on(signal, () => { + fs.appendFileSync( + process.env.BITCORE_CONTRACT_SIGNAL_LOG, + 'descendant:' + signal + '\\n' + ); + process.exit(0); + }); +} +fs.writeFileSync(process.env.BITCORE_CONTRACT_DESCENDANT_READY, 'ready\\n'); +setInterval(() => {}, 1000); +` + ); + + return { rootDir }; +} + +function lernaArgs(...args) { + return [LERNA_CLI, 'exec', '--concurrency', '1', ...args, '--', + '$LERNA_ROOT_PATH/contract-probe.js']; +} + +function runLerna(fixture, args, env) { + return spawnSync(process.execPath, lernaArgs(...args), { + cwd: fixture.rootDir, + encoding: 'utf8', + env: { ...process.env, ...env } + }); +} + +function readLines(filePath) { + if (!fs.existsSync(filePath)) { + return []; + } + return fs.readFileSync(filePath, 'utf8').trim().split('\n'); +} + +async function waitForFile(filePath) { + const deadline = Date.now() + 5000; + while (!fs.existsSync(filePath)) { + if (Date.now() >= deadline) { + throw new Error(`Timed out waiting for ${filePath}`); + } + await new Promise(resolve => setTimeout(resolve, 20)); + } +} + +async function waitForClose(child) { + return new Promise((resolve, reject) => { + child.once('error', reject); + child.once('close', (code, signal) => resolve({ code, signal })); + }); +} + +test('installed Lerna sets package cwd and environment and excludes insight', () => { + const fixture = createFixture(); + const artifactDir = path.join(fixture.rootDir, 'artifacts'); + fs.mkdirSync(artifactDir); + + const result = runLerna(fixture, ['--stream'], { + BITCORE_CONTRACT_ACTION: 'artifact', + BITCORE_CONTRACT_ARTIFACT_DIR: artifactDir + }); + + assert.equal(result.status, 0, result.stderr); + const artifacts = fs.readdirSync(artifactDir) + .map(file => JSON.parse(fs.readFileSync(path.join(artifactDir, file)))); + artifacts.sort((left, right) => left.packageName.localeCompare(right.packageName)); + + assert.deepEqual( + artifacts.map(artifact => artifact.packageName), + ['@contract/package-a', '@contract/package-b'] + ); + const realRootDir = fs.realpathSync(fixture.rootDir); + for (const artifact of artifacts) { + assert.equal(artifact.rootPath, realRootDir); + assert.equal( + artifact.cwd, + path.join(realRootDir, 'packages', path.basename(artifact.packageName)) + ); + } + assert.ok( + fs.readdirSync(artifactDir).every(file => /^[a-f0-9]{64}\.json$/.test(file)), + 'artifact filenames must not contain unchecked package-name characters' + ); +}); + +test('installed Lerna JSON discovery provides names and absolute locations', () => { + const result = spawnSync( + process.execPath, + [LERNA_CLI, 'list', '--all', '--json', '--loglevel', 'silent'], + { cwd: REPOSITORY_ROOT, encoding: 'utf8' } + ); + + assert.equal(result.status, 0, result.stderr); + const packages = JSON.parse(result.stdout); + assert.equal(packages.length, 18); + assert.ok(packages.every(packageEntry => + typeof packageEntry.name === 'string' && packageEntry.name.length > 0 && + typeof packageEntry.location === 'string' && + path.isAbsolute(packageEntry.location) + )); + assert.ok(packages.every(packageEntry => + packageEntry.location !== path.join(REPOSITORY_ROOT, 'packages', 'insight') + )); +}); + +test('repeated escaped exact scopes select only their union including private', () => { + const fixture = createFixture(true); + const logPath = path.join(fixture.rootDir, 'execution.log'); + const selectedNames = ['@contract/package-a', '@contract/package-b']; + const scopeArgs = selectedNames.flatMap(packageName => [ + '--scope', + exactScopePattern(packageName) + ]); + + const result = runLerna(fixture, scopeArgs, { + BITCORE_CONTRACT_ACTION: 'record', + BITCORE_CONTRACT_LOG: logPath + }); + + assert.equal(result.status, 0, result.stderr); + assert.deepEqual(readLines(logPath), selectedNames); +}); + +test('escaped exact scope does not broaden a valid package name', () => { + const fixture = createFixture(true); + const logPath = path.join(fixture.rootDir, 'execution.log'); + const packageName = '@contract/package-a'; + + const result = runLerna(fixture, [ + '--scope', + exactScopePattern(packageName) + ], { + BITCORE_CONTRACT_ACTION: 'record', + BITCORE_CONTRACT_LOG: logPath + }); + + assert.equal(result.status, 0, result.stderr); + assert.deepEqual(readLines(logPath), [packageName]); +}); + +test('--no-bail runs every child and returns the highest child status', () => { + const fixture = createFixture(); + const logPath = path.join(fixture.rootDir, 'execution.log'); + + const result = runLerna(fixture, ['--no-bail'], { + BITCORE_CONTRACT_ACTION: 'record', + BITCORE_CONTRACT_LOG: logPath, + BITCORE_CONTRACT_FAIL_PACKAGE: '@contract/package-a', + BITCORE_CONTRACT_FAIL_STATUS: '17' + }); + + assert.equal(result.status, 17, result.stderr); + assert.deepEqual(readLines(logPath), [ + '@contract/package-a', + '@contract/package-b' + ]); +}); + +test('default bail stops after the first failure and preserves its status', () => { + const fixture = createFixture(); + const logPath = path.join(fixture.rootDir, 'execution.log'); + + const result = runLerna(fixture, [], { + BITCORE_CONTRACT_ACTION: 'record', + BITCORE_CONTRACT_LOG: logPath, + BITCORE_CONTRACT_FAIL_PACKAGE: '@contract/package-a', + BITCORE_CONTRACT_FAIL_STATUS: '23' + }); + + assert.equal(result.status, 23, result.stderr); + assert.deepEqual(readLines(logPath), ['@contract/package-a']); +}); + +test('empty scope selection does not execute any packages', () => { + const fixture = createFixture(); + const logPath = path.join(fixture.rootDir, 'execution.log'); + + // No --scope arguments at all — the exec command has no selectors. + // This should not run in any package. The contract is that the + // coordinator never calls Lerna with an empty scope; this test + // proves Lerna's default behavior does not accidentally expand to all. + const result = spawnSync( + process.execPath, + [LERNA_CLI, 'exec', '--concurrency', '1', '--', + '$LERNA_ROOT_PATH/contract-probe.js'], + { + cwd: fixture.rootDir, + encoding: 'utf8', + env: { + ...process.env, + BITCORE_CONTRACT_ACTION: 'record', + BITCORE_CONTRACT_LOG: logPath + } + } + ); + + // Lerna with no --scope runs in all managed packages, which is why + // the coordinator must never call Lerna exec without scope arguments. + // This test documents that behavior so the empty-set guard in + // buildExecutionArgs is justified. + assert.equal(result.status, 0, result.stderr); + const executed = readLines(logPath); + assert.ok( + executed.length > 0, + 'Lerna exec without --scope arguments runs in managed packages; ' + + 'the coordinator must guard against this by returning null for empty sets' + ); + assert.ok( + !executed.includes('@contract/insight'), + 'Insight must still be excluded even in unscoped execution' + ); +}); + +for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { + test(`Lerna ${signal} cleanup terminates its command but not its descendant`, async () => { + const fixture = createFixture(); + const readyPath = path.join(fixture.rootDir, 'command-ready.json'); + const descendantReadyPath = path.join(fixture.rootDir, 'descendant-ready'); + const signalLogPath = path.join(fixture.rootDir, 'signals.log'); + const child = spawn(process.execPath, lernaArgs(), { + cwd: fixture.rootDir, + env: { + ...process.env, + BITCORE_CONTRACT_ACTION: 'signal', + BITCORE_CONTRACT_READY: readyPath, + BITCORE_CONTRACT_DESCENDANT_PROBE: + path.join(fixture.rootDir, 'descendant-probe.js'), + BITCORE_CONTRACT_DESCENDANT_READY: descendantReadyPath, + BITCORE_CONTRACT_SIGNAL_LOG: signalLogPath + }, + stdio: 'ignore' + }); + lernaProcesses.add(child.pid); + + await waitForFile(readyPath); + await waitForFile(descendantReadyPath); + const { descendantPid } = JSON.parse(fs.readFileSync(readyPath, 'utf8')); + descendantProcesses.add(descendantPid); + + child.kill(signal); + const result = await waitForClose(child); + lernaProcesses.delete(child.pid); + await new Promise(resolve => setTimeout(resolve, 100)); + + assert.deepEqual(result, { code: null, signal }); + assert.deepEqual(readLines(signalLogPath), ['command:SIGTERM']); + assert.doesNotThrow(() => process.kill(descendantPid, 0)); + }); +} diff --git a/test/validate-and-run-allowed-scripts.test.js b/test/validate-and-run-allowed-scripts.test.js index 8bf8e636325..d331365925e 100644 --- a/test/validate-and-run-allowed-scripts.test.js +++ b/test/validate-and-run-allowed-scripts.test.js @@ -1,16 +1,48 @@ 'use strict'; +/* eslint-disable @typescript-eslint/no-require-imports */ + const assert = require('node:assert/strict'); +const crypto = require('node:crypto'); const fs = require('node:fs'); const os = require('node:os'); const path = require('node:path'); const { spawn, spawnSync } = require('node:child_process'); const { afterEach, test } = require('node:test'); +const { + loadAllPackageConfigurations +} = require('@lavamoat/allow-scripts'); +const { + artifactNameForPackage, + buildExecutionArgs, + buildGlobalPlan, + exactScopePattern, + parseDiscoveryOutput, + validateArtifactSet, + validateGlobalPlan +} = require('../lifecycle-plan-coordinator'); +const { + buildArtifact, + validateConfigurationResult, + writeArtifact +} = require('../plan-allowed-scripts'); const REPOSITORY_ROOT = path.resolve(__dirname, '..'); +const LERNA_CLI = path.join(REPOSITORY_ROOT, 'node_modules', 'lerna', 'cli.js'); const temporaryDirectories = new Set(); +const fixtureProcesses = new Set(); afterEach(() => { + for (const pid of fixtureProcesses) { + try { + process.kill(pid, 'SIGKILL'); + } catch (error) { + if (error.code !== 'ESRCH') { + throw error; + } + } + } + fixtureProcesses.clear(); for (const temporaryDirectory of temporaryDirectories) { fs.rmSync(temporaryDirectory, { force: true, recursive: true }); } @@ -32,40 +64,67 @@ function createFixture(packageDefinitions) { const packagesDir = path.join(rootDir, 'packages'); const runnerPath = path.join(rootDir, 'validate-and-run-allowed-scripts.sh'); const plannerPath = path.join(rootDir, 'plan-allowed-scripts.js'); - const packageListPath = path.join(rootDir, 'package-list.txt'); + const coordinatorPath = path.join(rootDir, 'lifecycle-plan-coordinator.js'); + const executionWrapperPath = path.join(rootDir, 'run-allowed-scripts.js'); const logPath = path.join(rootDir, 'allow-scripts.log'); + const lernaLogPath = path.join(rootDir, 'lerna.log'); const readyPath = path.join(rootDir, 'lerna-ready'); + const lifecycleReadyPath = path.join(rootDir, 'lifecycle-ready.json'); + const descendantReadyPath = path.join(rootDir, 'descendant-ready'); + const signalLogPath = path.join(rootDir, 'signals.log'); fs.mkdirSync(binDir, { recursive: true }); fs.mkdirSync(packagesDir, { recursive: true }); + fs.writeFileSync( + path.join(rootDir, 'package.json'), + `${JSON.stringify({ name: 'allowed-scripts-fixture', private: true })}\n` + ); + fs.writeFileSync( + path.join(rootDir, 'lerna.json'), + `${JSON.stringify({ + version: '1.0.0', + packages: ['packages/[^insight]*'] + }, null, 2)}\n` + ); fs.copyFileSync( path.join(REPOSITORY_ROOT, 'validate-and-run-allowed-scripts.sh'), runnerPath ); fs.chmodSync(runnerPath, 0o755); + fs.copyFileSync( + path.join(REPOSITORY_ROOT, 'lifecycle-plan-coordinator.js'), + coordinatorPath + ); + fs.copyFileSync( + path.join(REPOSITORY_ROOT, 'run-allowed-scripts.js'), + executionWrapperPath + ); - const packageDirectories = []; for (const packageDefinition of packageDefinitions) { const packageDir = path.join(packagesDir, packageDefinition.directory); - packageDirectories.push(packageDir); fs.mkdirSync(packageDir, { recursive: true }); fs.writeFileSync( path.join(packageDir, 'package.json'), - `${JSON.stringify(packageDefinition.packageJson, null, 2)}\n` + `${JSON.stringify({ + version: '1.0.0', + ...packageDefinition.packageJson + }, null, 2)}\n` ); } - fs.writeFileSync(packageListPath, `${packageDirectories.join('\n')}\n`); writeExecutable( path.join(binDir, 'lerna'), `#!/bin/sh +if [ -n "\${BITCORE_TEST_LERNA_LOG:-}" ]; then + printf '%s\n' "$*" >> "$BITCORE_TEST_LERNA_LOG" +fi if [ -n "\${BITCORE_TEST_READY_FILE:-}" ]; then : > "$BITCORE_TEST_READY_FILE" fi if [ -n "\${BITCORE_TEST_LERNA_DELAY:-}" ]; then sleep "$BITCORE_TEST_LERNA_DELAY" fi -cat "$BITCORE_TEST_PACKAGE_LIST" +exec node "$BITCORE_TEST_REAL_LERNA" "$@" ` ); @@ -75,6 +134,9 @@ cat "$BITCORE_TEST_PACKAGE_LIST" command_name=$1 package_name=$(basename "$PWD") printf '%s\\t%s\\n' "$command_name" "$package_name" >> "$BITCORE_TEST_LOG" +if [ "$#" -gt 1 ]; then + printf '%s\\t%s\\targs:%s\\n' "$command_name" "$package_name" "$*" >> "$BITCORE_TEST_LOG" +fi if [ "$command_name" = "check" ] && [ "\${BITCORE_TEST_FAIL_CHECK:-}" = "$package_name" ]; then exit 1 @@ -84,22 +146,70 @@ if [ "$command_name" = "run" ] && [ "\${BITCORE_TEST_FAIL_RUN:-}" = "$package_na exit 23 fi +if [ "$command_name" = "run" ] && [ "\${BITCORE_TEST_SIGNAL_RUN:-}" = "$package_name" ]; then + exec node "$BITCORE_TEST_SIGNAL_PROBE" +fi + if [ "$command_name" = "list" ]; then echo "mock lifecycle inventory for $package_name" fi ` ); + fs.writeFileSync( + path.join(rootDir, 'signal-probe.js'), + `'use strict'; +const fs = require('node:fs'); +const { spawn } = require('node:child_process'); +const descendant = spawn( + process.execPath, + [process.env.BITCORE_TEST_DESCENDANT_PROBE], + { env: process.env, stdio: 'ignore' } +); +for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { + process.on(signal, () => { + fs.appendFileSync(process.env.BITCORE_TEST_SIGNAL_LOG, 'parent:' + signal + '\\n'); + process.exit(0); + }); +} +fs.writeFileSync( + process.env.BITCORE_TEST_LIFECYCLE_READY, + JSON.stringify({ parentPid: process.pid, descendantPid: descendant.pid }) +); +setInterval(() => {}, 1000); +` + ); + fs.writeFileSync( + path.join(rootDir, 'descendant-probe.js'), + `'use strict'; +const fs = require('node:fs'); +for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { + process.on(signal, () => { + fs.appendFileSync( + process.env.BITCORE_TEST_SIGNAL_LOG, + 'descendant:' + signal + '\\n' + ); + process.exit(0); + }); +} +fs.writeFileSync(process.env.BITCORE_TEST_DESCENDANT_READY, 'ready\\n'); +setInterval(() => {}, 1000); +` + ); + fs.writeFileSync( plannerPath, `'use strict'; +const crypto = require('node:crypto'); const fs = require('node:fs'); +const path = require('node:path'); -const packageDir = process.argv[2]; +const packageDir = fs.realpathSync(process.argv[2]); const packageJson = JSON.parse( - fs.readFileSync(\`\${packageDir}/package.json\`, 'utf8') + fs.readFileSync(path.join(packageDir, 'package.json'), 'utf8') ); +const packageName = packageJson.name; const implicitEvents = ['install', 'postinstall', 'prepublish', 'prepare'] .filter(event => { const script = packageJson.scripts?.[event]; @@ -113,9 +223,35 @@ if (implicitEvents.length > 0) { process.exit(1); } -for (const approvedPath of packageJson.testApprovedPaths || []) { - process.stdout.write(\`\${fs.realpathSync(approvedPath)}\\n\`); +if (process.env.BITCORE_TEST_FAIL_PLAN === path.basename(packageDir)) { + console.error('ERROR: simulated policy validation failure'); + process.exit(1); +} + +const artifact = { + schemaVersion: 1, + status: 'validated', + packageName, + packageDir, + approvedPaths: (packageJson.testApprovedPaths || []).map( + approvedPath => fs.realpathSync(approvedPath) + ) +}; +const artifactName = crypto.createHash('sha256') + .update(packageName) + .digest('hex') + '.json'; +if (process.env.BITCORE_TEST_SKIP_ARTIFACT !== path.basename(packageDir)) { + fs.writeFileSync( + path.join(process.env.BITCORE_LIFECYCLE_PLAN_DIR, artifactName), + JSON.stringify( + process.env.BITCORE_TEST_MALFORMED_ARTIFACT === path.basename(packageDir) + ? {} + : artifact + ) + '\\n', + { flag: 'wx' } + ); } +console.log('PASS: ' + packageName); ` ); @@ -123,17 +259,27 @@ for (const approvedPath of packageJson.testApprovedPaths || []) { env: { ...process.env, BITCORE_TEST_LOG: logPath, - BITCORE_TEST_PACKAGE_LIST: packageListPath + BITCORE_TEST_LERNA_LOG: lernaLogPath, + BITCORE_TEST_SIGNAL_PROBE: path.join(rootDir, 'signal-probe.js'), + BITCORE_TEST_DESCENDANT_PROBE: path.join(rootDir, 'descendant-probe.js'), + BITCORE_TEST_LIFECYCLE_READY: lifecycleReadyPath, + BITCORE_TEST_DESCENDANT_READY: descendantReadyPath, + BITCORE_TEST_SIGNAL_LOG: signalLogPath, + BITCORE_TEST_REAL_LERNA: LERNA_CLI }, logPath, + lernaLogPath, + lifecycleReadyPath, + descendantReadyPath, + signalLogPath, readyPath, rootDir, runnerPath }; } -function runFixture(fixture, additionalEnv = {}) { - return spawnSync('/bin/sh', [fixture.runnerPath], { +function runFixture(fixture, additionalEnv = {}, args = []) { + return spawnSync('/bin/sh', [fixture.runnerPath, ...args], { cwd: fixture.rootDir, encoding: 'utf8', env: { ...fixture.env, ...additionalEnv } @@ -157,6 +303,480 @@ async function waitForFile(filePath) { } } +async function waitForProcessExit(pid) { + const deadline = Date.now() + 5000; + while (true) { + try { + process.kill(pid, 0); + } catch (error) { + if (error.code === 'ESRCH') { + return; + } + throw error; + } + if (Date.now() >= deadline) { + throw new Error(`Timed out waiting for process ${pid} to exit`); + } + await new Promise(resolve => setTimeout(resolve, 20)); + } +} + +function createArtifactCollectionFixture() { + const rootDir = fs.realpathSync(fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-artifact-collection-') + )); + temporaryDirectories.add(rootDir); + const packageDir = path.join(rootDir, 'packages', 'package-a'); + const planDir = path.join(rootDir, 'plans'); + fs.mkdirSync(packageDir, { recursive: true }); + fs.mkdirSync(planDir); + const packageEntry = { name: '@scope/package-a', location: packageDir }; + const inventory = { schemaVersion: 1, packages: [packageEntry] }; + const artifact = { + schemaVersion: 1, + status: 'validated', + packageName: packageEntry.name, + packageDir, + approvedPaths: [] + }; + const artifactPath = path.join( + planDir, + artifactNameForPackage(packageEntry.name) + ); + return { artifact, artifactPath, inventory, packageDir, planDir, rootDir }; +} + +function writeJson(filePath, value) { + fs.writeFileSync(filePath, `${JSON.stringify(value)}\n`); +} + +test('structured discovery normalizes a closed managed-package inventory', () => { + const fixture = createArtifactCollectionFixture(); + const secondPackageDir = path.join(fixture.rootDir, 'packages', 'package-b'); + fs.mkdirSync(secondPackageDir); + + const inventory = parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ + { name: '@scope/package-a', location: fixture.packageDir }, + { name: '@scope/package-b', location: secondPackageDir } + ])); + + assert.deepEqual(inventory, { + schemaVersion: 1, + packages: [ + { name: '@scope/package-a', location: fixture.packageDir }, + { name: '@scope/package-b', location: secondPackageDir } + ] + }); +}); + +test('structured discovery fails closed on malformed or incomplete output', () => { + const fixture = createArtifactCollectionFixture(); + assert.throws( + () => parseDiscoveryOutput(fixture.rootDir, 'not json'), + /not valid JSON/ + ); + assert.throws( + () => parseDiscoveryOutput(fixture.rootDir, '[]'), + /non-empty JSON array/ + ); + assert.throws( + () => parseDiscoveryOutput( + fixture.rootDir, + JSON.stringify([{ name: '@scope/package-a' }]) + ), + /non-empty name and location fields/ + ); +}); + +test('structured discovery rejects duplicate names and locations', () => { + const fixture = createArtifactCollectionFixture(); + const secondPackageDir = path.join(fixture.rootDir, 'packages', 'package-b'); + fs.mkdirSync(secondPackageDir); + assert.throws( + () => parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ + { name: '@scope/package-a', location: fixture.packageDir }, + { name: '@scope/package-a', location: secondPackageDir } + ])), + /duplicate package name/ + ); + assert.throws( + () => parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ + { name: '@scope/package-a', location: fixture.packageDir }, + { name: '@scope/package-b', location: fixture.packageDir } + ])), + /duplicate package location/ + ); +}); + +test('structured discovery rejects packages outside the repository and insight', () => { + const fixture = createArtifactCollectionFixture(); + const outsideDir = fs.mkdtempSync(path.join(os.tmpdir(), 'bitcore-outside-')); + temporaryDirectories.add(outsideDir); + assert.throws( + () => parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ + { name: '@scope/outside', location: outsideDir } + ])), + /outside the repository/ + ); + + const insightDir = path.join(fixture.rootDir, 'packages', 'insight'); + fs.mkdirSync(insightDir); + assert.throws( + () => parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ + { name: '@scope/insight', location: insightDir } + ])), + /excluded packages\/insight/ + ); +}); + +test('artifact collection accepts exactly one matching artifact per package', () => { + const fixture = createArtifactCollectionFixture(); + writeJson(fixture.artifactPath, fixture.artifact); + assert.deepEqual( + validateArtifactSet(fixture.inventory, fixture.planDir), + [fixture.artifact] + ); +}); + +test('artifact collection rejects missing, unexpected, and duplicate artifacts', () => { + const fixture = createArtifactCollectionFixture(); + assert.throws( + () => validateArtifactSet(fixture.inventory, fixture.planDir), + /Missing lifecycle plan artifact/ + ); + + writeJson(path.join(fixture.planDir, 'unexpected.json'), { + ...fixture.artifact, + packageName: '@scope/unexpected' + }); + assert.throws( + () => validateArtifactSet(fixture.inventory, fixture.planDir), + /Unexpected lifecycle plan artifact/ + ); + + fs.rmSync(path.join(fixture.planDir, 'unexpected.json')); + writeJson(fixture.artifactPath, fixture.artifact); + writeJson(path.join(fixture.planDir, 'duplicate.json'), fixture.artifact); + assert.throws( + () => validateArtifactSet(fixture.inventory, fixture.planDir), + /Duplicate lifecycle plan artifacts/ + ); +}); + +test('artifact collection rejects schema, status, and identity mismatches', () => { + for (const [change, pattern] of [ + [{ schemaVersion: 2 }, /malformed/], + [{ status: 'failed' }, /malformed/], + [{ packageName: '@scope/wrong' }, /package-name mismatch/], + [{ packageDir: '/wrong/location' }, /package-location mismatch/] + ]) { + const fixture = createArtifactCollectionFixture(); + writeJson(fixture.artifactPath, { ...fixture.artifact, ...change }); + assert.throws( + () => validateArtifactSet(fixture.inventory, fixture.planDir), + pattern + ); + } +}); + +test('artifact collection rejects malformed JSON and duplicate approved paths', () => { + const malformedFixture = createArtifactCollectionFixture(); + fs.writeFileSync(malformedFixture.artifactPath, '{'); + assert.throws( + () => validateArtifactSet(malformedFixture.inventory, malformedFixture.planDir), + /is malformed/ + ); + + const duplicateFixture = createArtifactCollectionFixture(); + writeJson(duplicateFixture.artifactPath, { + ...duplicateFixture.artifact, + approvedPaths: [duplicateFixture.packageDir, duplicateFixture.packageDir] + }); + assert.throws( + () => validateArtifactSet(duplicateFixture.inventory, duplicateFixture.planDir), + /duplicate approved path/ + ); + + const nonCanonicalFixture = createArtifactCollectionFixture(); + writeJson(nonCanonicalFixture.artifactPath, { + ...nonCanonicalFixture.artifact, + approvedPaths: [ + `${nonCanonicalFixture.packageDir}/../` + + path.basename(nonCanonicalFixture.packageDir) + ] + }); + assert.throws( + () => validateArtifactSet( + nonCanonicalFixture.inventory, + nonCanonicalFixture.planDir + ), + /non-canonical path/ + ); +}); + +test('global planning groups identical sets and keeps disjoint sets separate', () => { + const fixture = createArtifactCollectionFixture(); + const sharedPath = path.join(fixture.rootDir, 'shared-dependency'); + const secondSharedPath = path.join(fixture.rootDir, 'second-shared-dependency'); + const disjointPath = path.join(fixture.rootDir, 'disjoint-dependency'); + const packages = ['package-a', 'package-b', 'package-c', 'package-empty'] + .map(name => ({ + name, + location: path.join(fixture.rootDir, 'packages', name) + })); + const inventory = { schemaVersion: 1, packages }; + const artifacts = [ + { + packageName: 'package-a', + packageDir: packages[0].location, + approvedPaths: [sharedPath, secondSharedPath] + }, + { + packageName: 'package-b', + packageDir: packages[1].location, + approvedPaths: [secondSharedPath, sharedPath] + }, + { + packageName: 'package-c', + packageDir: packages[2].location, + approvedPaths: [disjointPath] + }, + { + packageName: 'package-empty', + packageDir: packages[3].location, + approvedPaths: [] + } + ]; + + const globalPlan = buildGlobalPlan(inventory, artifacts); + assert.deepEqual( + globalPlan.selectedPackages.map(packageEntry => packageEntry.name), + ['package-a', 'package-c'] + ); + assert.equal(globalPlan.groups.length, 2); + assert.deepEqual(globalPlan.groups[0].packageNames, [ + 'package-a', + 'package-b' + ]); + assert.equal(globalPlan.groups[0].representative.name, 'package-a'); + assert.equal( + globalPlan.packages.find(packagePlan => packagePlan.name === 'package-empty') + .selected, + false + ); +}); + +test('global planning rejects partial overlaps before selection can execute', () => { + const fixture = createArtifactCollectionFixture(); + const packages = ['package-a', 'package-b'].map(name => ({ + name, + location: path.join(fixture.rootDir, 'packages', name) + })); + const inventory = { schemaVersion: 1, packages }; + assert.throws( + () => buildGlobalPlan(inventory, [ + { + packageName: 'package-a', + packageDir: packages[0].location, + approvedPaths: ['/dependency/one', '/dependency/shared'] + }, + { + packageName: 'package-b', + packageDir: packages[1].location, + approvedPaths: ['/dependency/shared', '/dependency/two'] + } + ]), + /package-b has a partial overlap with package-a/ + ); +}); + +test('global-plan acceptance rejects invalid selected-package state', () => { + assert.throws( + () => validateGlobalPlan( + [{ + name: 'package-empty', + location: '/packages/package-empty', + approvedPaths: [], + selected: true + }], + [], + [{ name: 'package-empty', location: '/packages/package-empty' }] + ), + /selected packages do not match|invalid selection/ + ); +}); + +test('execution scopes are separate exact argv values with empty-set safety', () => { + const packageNames = ['@scope/package-a', '@scope/package-[literal]']; + const args = buildExecutionArgs( + packageNames.map(name => ({ name, location: `/packages/${name}` })) + ); + assert.deepEqual(args, [ + 'exec', + '--concurrency', + '1', + '--stream', + '--scope', + exactScopePattern(packageNames[0]), + '--scope', + exactScopePattern(packageNames[1]), + '--', + 'node', + '"$BITCORE_LIFECYCLE_RUN_WRAPPER"' + ]); + assert.equal(buildExecutionArgs([]), null); +}); + +test('planner validates the installed allow-scripts configuration shape', async () => { + const fixture = createArtifactCollectionFixture(); + writeJson(path.join(fixture.packageDir, 'package.json'), { + name: '@scope/package-a' + }); + const result = await loadAllPackageConfigurations({ + rootDir: fixture.packageDir + }); + + const validated = validateConfigurationResult('@scope/package-a', result); + assert.equal(typeof validated.somePoliciesAreMissing, 'boolean'); + assert.ok(validated.canonicalNamesByPath instanceof Map); + assert.ok(validated.lifecycle.packagesWithScripts instanceof Map); + for (const field of [ + 'allowedPatterns', + 'excessPolicies', + 'missingPolicies' + ]) { + assert.ok(Array.isArray(validated.lifecycle[field])); + } +}); + +test('planner fails clearly when the allow-scripts result shape changes', () => { + for (const result of [ + null, + {}, + { configs: { lifecycle: {} }, somePoliciesAreMissing: false }, + { + canonicalNamesByPath: new Map(), + configs: { + lifecycle: { + allowConfig: {}, + allowedPatterns: [], + excessPolicies: [], + missingPolicies: [], + packagesWithScripts: [] + } + }, + somePoliciesAreMissing: false + } + ]) { + assert.throws( + () => validateConfigurationResult('@scope/package-a', result), + /unsupported loadAllPackageConfigurations result shape/ + ); + } +}); + +test('planner adds package identity to configuration loading failures', async () => { + const fixture = createArtifactCollectionFixture(); + writeJson(path.join(fixture.packageDir, 'package.json'), { + name: '@scope/package-a' + }); + await assert.rejects( + () => buildArtifact(fixture.packageDir, async () => { + throw new Error('simulated loader failure'); + }), + /@scope\/package-a could not load.*simulated loader failure/ + ); +}); + +test('planner rejects approved paths outside the expected dependency tree', async () => { + const fixture = createArtifactCollectionFixture(); + const outsideDir = fs.realpathSync(fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-approved-outside-') + )); + temporaryDirectories.add(outsideDir); + writeJson(path.join(fixture.packageDir, 'package.json'), { + name: '@scope/package-a', + lavamoat: { allowScripts: { 'unsafe#1.0.0': true } } + }); + + await assert.rejects( + () => buildArtifact(fixture.packageDir, async () => ({ + canonicalNamesByPath: new Map(), + configs: { + lifecycle: { + allowConfig: { 'unsafe#1.0.0': true }, + allowedPatterns: ['unsafe#1.0.0'], + excessPolicies: [], + missingPolicies: [], + packagesWithScripts: new Map([ + ['unsafe#1.0.0', [{ path: outsideDir }]] + ]) + } + }, + somePoliciesAreMissing: false + })), + /outside its expected dependency tree/ + ); +}); + +test('planner rejects duplicate physical paths within one package plan', async () => { + const fixture = createArtifactCollectionFixture(); + const dependencyDir = path.join(fixture.packageDir, 'node_modules', 'unsafe'); + fs.mkdirSync(dependencyDir, { recursive: true }); + writeJson(path.join(fixture.packageDir, 'package.json'), { + name: '@scope/package-a', + lavamoat: { + allowScripts: { + 'first#1.0.0': true, + 'second#1.0.0': true + } + } + }); + const packageEntry = { path: dependencyDir }; + + await assert.rejects( + () => buildArtifact(fixture.packageDir, async () => ({ + canonicalNamesByPath: new Map([[dependencyDir, 'unsafe']]), + configs: { + lifecycle: { + allowConfig: { + 'first#1.0.0': true, + 'second#1.0.0': true + }, + allowedPatterns: ['first#1.0.0', 'second#1.0.0'], + excessPolicies: [], + missingPolicies: [], + packagesWithScripts: new Map([ + ['first#1.0.0', [packageEntry]], + ['second#1.0.0', [packageEntry]] + ]) + } + }, + somePoliciesAreMissing: false + })), + /resolves multiple approvals/ + ); +}); + +test('planner publishes artifacts atomically and exclusively', () => { + const fixture = createArtifactCollectionFixture(); + writeArtifact(fixture.planDir, fixture.artifact); + assert.deepEqual( + JSON.parse(fs.readFileSync(fixture.artifactPath, 'utf8')), + fixture.artifact + ); + assert.deepEqual(fs.readdirSync(fixture.planDir), [ + path.basename(fixture.artifactPath) + ]); + assert.throws( + () => writeArtifact(fixture.planDir, fixture.artifact), + error => error.code === 'EEXIST' + ); + assert.deepEqual(fs.readdirSync(fixture.planDir), [ + path.basename(fixture.artifactPath) + ]); +}); + test('production planner rejects implicit workspace lifecycle hooks', () => { const packageDir = fs.mkdtempSync( path.join(os.tmpdir(), 'bitcore-planner-package-') @@ -229,6 +849,38 @@ test('production planner accepts an inactive denied policy', () => { { encoding: 'utf8' } ); + assert.equal(result.status, 0, result.stderr); + assert.equal(result.stdout, ''); + assert.match( + result.stderr, + /inactive denied lifecycle policies.*not installed on this platform/ + ); +}); + +test('production planner accepts an active versionless denial', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + const dependencyDir = path.join(packageDir, 'node_modules', 'unsafe'); + fs.mkdirSync(dependencyDir, { recursive: true }); + writeJson(path.join(packageDir, 'package.json'), { + name: 'package-with-active-denial', + dependencies: { unsafe: '1.0.0' }, + lavamoat: { allowScripts: { unsafe: false } } + }); + writeJson(path.join(dependencyDir, 'package.json'), { + name: 'unsafe', + version: '1.0.0', + scripts: { postinstall: 'echo denied' } + }); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } + ); + assert.equal(result.status, 0, result.stderr); assert.equal(result.stdout, ''); }); @@ -260,59 +912,459 @@ test('production planner rejects an inactive approved policy', () => { assert.match(result.stderr, /lifecycle policy changed after validation/); }); -test('accepts inactive denied policies on the current platform', () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [] +test('production planner rejects non-boolean policy decisions', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ + name: 'package-with-non-boolean-policy', + lavamoat: { + allowScripts: { + fsevents: 'false' + } } - } - ]); - - const result = runFixture(fixture, { - BITCORE_TEST_FAIL_CHECK: 'package-a' - }); + }, null, 2)}\n` + ); - assert.equal(result.status, 0, result.stderr); - assert.deepEqual(readLog(fixture.logPath), ['check\tpackage-a']); - assert.match( - result.stdout, - /inactive denied lifecycle policies.*not installed on this platform/ + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } ); + + assert.equal(result.status, 1); + assert.match(result.stderr, /decision for fsevents must be boolean/); }); -test('does not mask a failed check when the planner rejects the package', () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - scripts: { - prepare: 'echo unsafe implicit execution' - }, - testApprovedPaths: [] +test('production planner rejects versionless approvals', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ + name: 'package-with-versionless-approval', + lavamoat: { + allowScripts: { + unsafe: true + } } - } - ]); + }, null, 2)}\n` + ); - const result = runFixture(fixture, { - BITCORE_TEST_FAIL_CHECK: 'package-a' - }); + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } + ); assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), [ - 'check\tpackage-a', - 'list\tpackage-a' - ]); - assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); - assert.match(result.stdout, /policy validation failed for 1 package/); - assert.match(result.stdout, /Approved lifecycle scripts were not executed/); + assert.match(result.stderr, /approval for unsafe must include a version/); }); -test('executes a shared physical approved path only once', () => { - const sharedDependency = fs.mkdtempSync( +test('production planner rejects a mismatched version approval', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + const dependencyDir = path.join(packageDir, 'node_modules', 'unsafe'); + fs.mkdirSync(dependencyDir, { recursive: true }); + writeJson(path.join(packageDir, 'package.json'), { + name: 'package-with-mismatched-approval', + dependencies: { unsafe: '1.0.0' }, + lavamoat: { allowScripts: { 'unsafe#2.0.0': true } } + }); + writeJson(path.join(dependencyDir, 'package.json'), { + name: 'unsafe', + version: '1.0.0', + scripts: { postinstall: 'echo unsafe' } + }); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } + ); + + assert.equal(result.status, 1); + assert.match(result.stderr, /lifecycle policy changed after validation/); +}); + +test('production planner rejects a mismatched Lerna package identity', () => { + const rootDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-root-') + ); + temporaryDirectories.add(rootDir); + const packageDir = path.join(rootDir, 'packages', 'package-a'); + const planDir = path.join(rootDir, 'plans'); + fs.mkdirSync(packageDir, { recursive: true }); + fs.mkdirSync(planDir); + writeJson(path.join(packageDir, 'package.json'), { + name: '@scope/package-a' + }); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), '.'], + { + cwd: packageDir, + encoding: 'utf8', + env: { + ...process.env, + BITCORE_LIFECYCLE_PLAN_DIR: planDir, + LERNA_PACKAGE_NAME: '@scope/wrong-package', + LERNA_ROOT_PATH: rootDir + } + } + ); + + assert.equal(result.status, 1); + assert.match(result.stderr, /Lerna package identity mismatch/); + assert.deepEqual(fs.readdirSync(planDir), []); +}); + +test('production planner rejects missing policy decisions', () => { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-package-') + ); + temporaryDirectories.add(packageDir); + const dependencyDir = path.join(packageDir, 'node_modules', 'unsafe'); + fs.mkdirSync(dependencyDir, { recursive: true }); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ + name: 'package-with-missing-policy', + dependencies: { + unsafe: '1.0.0' + } + }, null, 2)}\n` + ); + fs.writeFileSync( + path.join(dependencyDir, 'package.json'), + `${JSON.stringify({ + name: 'unsafe', + version: '1.0.0', + scripts: { + postinstall: 'echo unsafe' + } + }, null, 2)}\n` + ); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], + { encoding: 'utf8' } + ); + + assert.equal(result.status, 1); + assert.match(result.stderr, /lifecycle policy changed after validation/); +}); + +test('production planner writes one safe structured artifact for an empty plan', () => { + const rootDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-root-') + ); + temporaryDirectories.add(rootDir); + const packageDir = path.join(rootDir, 'packages', 'package-a'); + const planDir = path.join(rootDir, 'plans'); + fs.mkdirSync(packageDir, { recursive: true }); + fs.mkdirSync(planDir); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ + name: '@scope/package-a', + lavamoat: { + allowScripts: { + fsevents: false + } + } + }, null, 2)}\n` + ); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), '.'], + { + cwd: packageDir, + encoding: 'utf8', + env: { + ...process.env, + BITCORE_LIFECYCLE_PLAN_DIR: planDir, + LERNA_PACKAGE_NAME: '@scope/package-a', + LERNA_ROOT_PATH: rootDir + } + } + ); + + assert.equal(result.status, 0, result.stderr); + const artifactName = `${crypto.createHash('sha256') + .update('@scope/package-a') + .digest('hex')}.json`; + assert.deepEqual( + JSON.parse(fs.readFileSync(path.join(planDir, artifactName), 'utf8')), + { + schemaVersion: 1, + status: 'validated', + packageName: '@scope/package-a', + packageDir: fs.realpathSync(packageDir), + approvedPaths: [] + } + ); +}); + +test('production planner writes real approved dependency paths', () => { + const rootDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-planner-root-') + ); + temporaryDirectories.add(rootDir); + const packageDir = path.join(rootDir, 'packages', 'package-a'); + const dependencyDir = path.join(packageDir, 'node_modules', 'unsafe'); + const planDir = path.join(rootDir, 'plans'); + fs.mkdirSync(dependencyDir, { recursive: true }); + fs.mkdirSync(planDir); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify({ + name: '@scope/package-a', + dependencies: { + unsafe: '1.0.0' + }, + lavamoat: { + allowScripts: { + 'unsafe#1.0.0': true + } + } + }, null, 2)}\n` + ); + fs.writeFileSync( + path.join(dependencyDir, 'package.json'), + `${JSON.stringify({ + name: 'unsafe', + version: '1.0.0', + scripts: { + postinstall: 'echo approved' + } + }, null, 2)}\n` + ); + + const result = spawnSync( + process.execPath, + [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), '.'], + { + cwd: packageDir, + encoding: 'utf8', + env: { + ...process.env, + BITCORE_LIFECYCLE_PLAN_DIR: planDir, + LERNA_PACKAGE_NAME: '@scope/package-a', + LERNA_ROOT_PATH: rootDir + } + } + ); + + assert.equal(result.status, 0, result.stderr); + const [artifactFile] = fs.readdirSync(planDir); + const artifact = JSON.parse( + fs.readFileSync(path.join(planDir, artifactFile), 'utf8') + ); + assert.deepEqual(artifact.approvedPaths, [fs.realpathSync(dependencyDir)]); +}); + +test('accepts inactive denied policies on the current platform', () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [] + } + } + ]); + + const result = runFixture(fixture, { + BITCORE_TEST_FAIL_CHECK: 'package-a' + }); + + assert.equal(result.status, 0, result.stderr); + assert.deepEqual(readLog(fixture.logPath), []); + assert.equal( + readLog(fixture.lernaLogPath).filter(line => + line.includes('run-allowed-scripts.js') + ).length, + 0 + ); + assert.match(result.stdout, /No approved dependency lifecycle scripts were required/); +}); + +test('does not execute when the authoritative planner rejects a package', () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + scripts: { + prepare: 'echo unsafe implicit execution' + }, + testApprovedPaths: [] + } + } + ]); + + const result = runFixture(fixture); + + assert.equal(result.status, 1); + assert.deepEqual(readLog(fixture.logPath), []); + assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); + assert.match(result.stdout, /policy validation or lifecycle planning failed/); + assert.match(result.stdout, /Approved lifecycle scripts were not executed/); +}); + +test('planner failures do not prevent later packages from being validated', () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + scripts: { + prepare: 'echo unsafe implicit execution' + }, + testApprovedPaths: [] + } + }, + { + directory: 'package-b', + packageJson: { + name: 'package-b', + testApprovedPaths: [] + } + } + ]); + + const result = runFixture(fixture); + + assert.equal(result.status, 1); + assert.deepEqual(readLog(fixture.logPath), []); + assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); + assert.match(result.stdout, /package-b: PASS: package-b/); + assert.match(result.stdout, /Approved lifecycle scripts were not executed/); +}); + +test('multiple validation failures prevent execution and all are reported', () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + scripts: { + prepare: 'echo unsafe implicit execution' + }, + testApprovedPaths: [] + } + }, + { + directory: 'package-b', + packageJson: { + name: 'package-b', + scripts: { + postinstall: 'echo also unsafe' + }, + testApprovedPaths: [] + } + }, + { + directory: 'package-c', + packageJson: { + name: 'package-c', + testApprovedPaths: [] + } + } + ]); + + const result = runFixture(fixture); + + assert.equal(result.status, 1); + assert.deepEqual(readLog(fixture.logPath), []); + assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); + assert.match(result.stderr, /implicit top-level lifecycle hooks: postinstall/); + assert.match(result.stdout, /package-c: PASS: package-c/); + assert.match(result.stdout, /policy validation or lifecycle planning failed/); + assert.match(result.stdout, /Approved lifecycle scripts were not executed/); +}); + +test('check-only mode validates the complete plan without execution', () => { + const approvedDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-approved-dependency-') + ); + temporaryDirectories.add(approvedDependency); + + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [approvedDependency] + } + } + ]); + + const result = runFixture(fixture, {}, ['--check-only']); + + assert.equal(result.status, 0, result.stderr); + assert.deepEqual(readLog(fixture.logPath), []); + assert.match(result.stdout, /execution plan passed validation/); + assert.match(result.stdout, /lifecycle scripts were not executed/); +}); + +test('does not execute when a package artifact is missing', () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [] + } + } + ]); + + const result = runFixture(fixture, { + BITCORE_TEST_SKIP_ARTIFACT: 'package-a' + }); + + assert.equal(result.status, 1); + assert.deepEqual(readLog(fixture.logPath), []); + assert.match(result.stderr, /Missing lifecycle plan artifact/); + assert.match(result.stdout, /global lifecycle execution plan is incomplete/); + assert.match(result.stdout, /Approved lifecycle scripts were not executed/); +}); + +test('does not execute when a package artifact is malformed', () => { + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [] + } + } + ]); + + const result = runFixture(fixture, { + BITCORE_TEST_MALFORMED_ARTIFACT: 'package-a' + }); + + assert.equal(result.status, 1); + assert.deepEqual(readLog(fixture.logPath), []); + assert.match(result.stderr, /Lifecycle plan.*malformed/); + assert.match(result.stdout, /global lifecycle execution plan is incomplete/); + assert.match(result.stdout, /Approved lifecycle scripts were not executed/); +}); + +test('executes a shared physical approved path only once', () => { + const sharedDependency = fs.mkdtempSync( path.join(os.tmpdir(), 'bitcore-shared-dependency-') ); temporaryDirectories.add(sharedDependency); @@ -338,14 +1390,50 @@ test('executes a shared physical approved path only once', () => { assert.equal(result.status, 0, result.stderr); assert.deepEqual(readLog(fixture.logPath), [ - 'check\tpackage-a', - 'check\tpackage-b', 'run\tpackage-a' ]); assert.match( result.stdout, /SKIP: package-b's approved dependency scripts are already planned\./ ); + // 11.3 #18: verify allow-scripts run was invoked without --skip-versions + const logLines = readLog(fixture.logPath); + for (const line of logLines) { + assert.ok( + !line.includes('--skip-versions'), + 'allow-scripts run must not receive --skip-versions' + ); + } +}); + +test('allow-scripts run is invoked without --skip-versions or npx', () => { + const approvedDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-approved-dependency-') + ); + temporaryDirectories.add(approvedDependency); + + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [approvedDependency] + } + } + ]); + + const result = runFixture(fixture); + + assert.equal(result.status, 0, result.stderr); + const logLines = readLog(fixture.logPath); + assert.equal(logLines.length, 1); + assert.equal(logLines[0], 'run\tpackage-a', + 'allow-scripts run must have no extra arguments (no --skip-versions)'); + // 11.3 #17: the runner uses the root-pinned allow-scripts binary, not npx + assert.ok( + !result.stdout.includes('npx') && !result.stderr.includes('npx'), + 'production must not use npx' + ); }); test('rejects partial approved-path overlaps before execution', () => { @@ -378,11 +1466,8 @@ test('rejects partial approved-path overlaps before execution', () => { const result = runFixture(fixture); assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), [ - 'check\tpackage-a', - 'check\tpackage-b' - ]); - assert.match(result.stdout, /package-b has a partial overlap/); + assert.deepEqual(readLog(fixture.logPath), []); + assert.match(result.stderr, /package-b has a partial overlap/); assert.match(result.stdout, /Approved lifecycle scripts were not executed/); }); @@ -408,7 +1493,7 @@ test('rejects implicit workspace lifecycle hooks before execution', () => { const result = runFixture(fixture); assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), ['check\tpackage-a']); + assert.deepEqual(readLog(fixture.logPath), []); assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); assert.match(result.stdout, /Approved lifecycle scripts were not executed/); }); @@ -434,14 +1519,116 @@ test('preserves an approved lifecycle execution failure status', () => { }); assert.equal(result.status, 23); - assert.deepEqual(readLog(fixture.logPath), [ - 'check\tpackage-a', - 'run\tpackage-a', - 'list\tpackage-a' - ]); + assert.deepEqual(readLog(fixture.logPath), ['run\tpackage-a']); assert.match(result.stdout, /Exit status: 23/); }); +test('selected-package execution is serial and fail-fast', () => { + const firstDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-first-dependency-') + ); + const secondDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-second-dependency-') + ); + temporaryDirectories.add(firstDependency); + temporaryDirectories.add(secondDependency); + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [firstDependency] + } + }, + { + directory: 'package-b', + packageJson: { + name: 'package-b', + testApprovedPaths: [secondDependency] + } + } + ]); + + const result = runFixture(fixture, { + BITCORE_TEST_FAIL_RUN: 'package-a' + }); + + assert.equal(result.status, 23); + assert.deepEqual(readLog(fixture.logPath), ['run\tpackage-a']); +}); + +for (const [signal, expectedStatus] of [ + ['SIGHUP', 129], + ['SIGINT', 130], + ['SIGTERM', 143] +]) { + test(`${signal} terminates the active lifecycle process tree`, async () => { + const firstDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-first-dependency-') + ); + const secondDependency = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-second-dependency-') + ); + temporaryDirectories.add(firstDependency); + temporaryDirectories.add(secondDependency); + const fixture = createFixture([ + { + directory: 'package-a', + packageJson: { + name: 'package-a', + testApprovedPaths: [firstDependency] + } + }, + { + directory: 'package-b', + packageJson: { + name: 'package-b', + testApprovedPaths: [secondDependency] + } + } + ]); + const child = spawn('/bin/sh', [fixture.runnerPath], { + cwd: fixture.rootDir, + env: { + ...fixture.env, + BITCORE_TEST_SIGNAL_RUN: 'package-a' + }, + stdio: 'ignore' + }); + fixtureProcesses.add(child.pid); + + await waitForFile(fixture.lifecycleReadyPath); + await waitForFile(fixture.descendantReadyPath); + const { parentPid, descendantPid } = JSON.parse( + fs.readFileSync(fixture.lifecycleReadyPath, 'utf8') + ); + fixtureProcesses.add(parentPid); + fixtureProcesses.add(descendantPid); + + child.kill(signal); + const result = await new Promise((resolve, reject) => { + child.once('error', reject); + child.once('close', (code, closeSignal) => + resolve({ code, signal: closeSignal }) + ); + }); + fixtureProcesses.delete(child.pid); + await waitForProcessExit(parentPid); + await waitForProcessExit(descendantPid); + fixtureProcesses.delete(parentPid); + fixtureProcesses.delete(descendantPid); + + assert.deepEqual(result, { code: expectedStatus, signal: null }); + // 11.3 #7: shared dependency executes once + // 11.3 #15: no later package begins after interruption + assert.deepEqual(readLog(fixture.logPath), ['run\tpackage-a']); + assert.deepEqual(readLog(fixture.signalLogPath).sort(), [ + 'descendant:SIGTERM', + 'parent:SIGTERM' + ]); + }); +} + test('terminates with the signal status instead of continuing', async () => { const fixture = createFixture([ { diff --git a/validate-and-run-allowed-scripts.sh b/validate-and-run-allowed-scripts.sh index 160edccb8ed..73baa7313ce 100755 --- a/validate-and-run-allowed-scripts.sh +++ b/validate-and-run-allowed-scripts.sh @@ -5,7 +5,8 @@ # # If all policies validate, build a fail-closed execution plan and then run # each physical approved dependency tree at most once. Execution stops on the -# first failure. +# first failure. Pass --check-only to stop after successful planning without +# running any lifecycle scripts. set -u @@ -13,41 +14,65 @@ ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) LERNA="$ROOT_DIR/node_modules/.bin/lerna" ALLOW_SCRIPTS="$ROOT_DIR/node_modules/.bin/allow-scripts" PLAN_ALLOWED_SCRIPTS="$ROOT_DIR/plan-allowed-scripts.js" - -PACKAGE_LIST= -RUN_PACKAGE_LIST= -SEEN_SCRIPT_PATHS= -CURRENT_SCRIPT_PATHS= +LIFECYCLE_COORDINATOR="$ROOT_DIR/lifecycle-plan-coordinator.js" +LIFECYCLE_RUN_WRAPPER="$ROOT_DIR/run-allowed-scripts.js" + +PACKAGE_INVENTORY= +PLAN_DIR= +GLOBAL_PLAN= +ACTIVE_CHILD= +CHECK_ONLY=false + +case "${1:-}" in + '') + ;; + --check-only) + CHECK_ONLY=true + ;; + *) + echo "Usage: $0 [--check-only]" + exit 2 + ;; +esac + +if [ "$#" -gt 1 ]; then + echo "Usage: $0 [--check-only]" + exit 2 +fi cleanup() { - [ -z "$PACKAGE_LIST" ] || rm -f -- "$PACKAGE_LIST" - [ -z "$RUN_PACKAGE_LIST" ] || rm -f -- "$RUN_PACKAGE_LIST" - [ -z "$SEEN_SCRIPT_PATHS" ] || rm -f -- "$SEEN_SCRIPT_PATHS" - [ -z "$CURRENT_SCRIPT_PATHS" ] || rm -f -- "$CURRENT_SCRIPT_PATHS" + [ -z "$PACKAGE_INVENTORY" ] || rm -f -- "$PACKAGE_INVENTORY" + [ -z "$PLAN_DIR" ] || rm -rf -- "$PLAN_DIR" + [ -z "$GLOBAL_PLAN" ] || rm -f -- "$GLOBAL_PLAN" } -trap cleanup 0 -trap 'exit 129' HUP -trap 'exit 130' INT -trap 'exit 143' TERM +handle_signal() { + signal_name=$1 + signal_status=$2 + if [ -n "$ACTIVE_CHILD" ]; then + kill -s "$signal_name" "$ACTIVE_CHILD" 2>/dev/null || true + wait "$ACTIVE_CHILD" 2>/dev/null || true + fi + exit "$signal_status" +} -if ! PACKAGE_LIST=$(mktemp); then - echo "ERROR: Unable to create a temporary package-list file." - exit 1 -fi +trap cleanup 0 +trap 'handle_signal HUP 129' HUP +trap 'handle_signal INT 130' INT +trap 'handle_signal TERM 143' TERM -if ! RUN_PACKAGE_LIST=$(mktemp); then - echo "ERROR: Unable to create a temporary execution-plan file." +if ! PACKAGE_INVENTORY=$(mktemp); then + echo "ERROR: Unable to create a temporary package-inventory file." exit 1 fi -if ! SEEN_SCRIPT_PATHS=$(mktemp); then - echo "ERROR: Unable to create a temporary approved-path file." +if ! GLOBAL_PLAN=$(mktemp); then + echo "ERROR: Unable to create a temporary global-plan file." exit 1 fi -if ! CURRENT_SCRIPT_PATHS=$(mktemp); then - echo "ERROR: Unable to create a temporary package-path file." +if ! PLAN_DIR=$(mktemp -d); then + echo "ERROR: Unable to create a temporary lifecycle-plan directory." exit 1 fi @@ -71,74 +96,58 @@ if [ ! -f "$PLAN_ALLOWED_SCRIPTS" ]; then exit 1 fi +if [ ! -f "$LIFECYCLE_COORDINATOR" ]; then + echo "ERROR: Lifecycle plan coordinator not found:" + echo " $LIFECYCLE_COORDINATOR" + exit 1 +fi + +if [ ! -f "$LIFECYCLE_RUN_WRAPPER" ]; then + echo "ERROR: Lifecycle execution wrapper not found:" + echo " $LIFECYCLE_RUN_WRAPPER" + exit 1 +fi + if ! cd "$ROOT_DIR"; then echo "ERROR: Unable to enter the repository root:" echo " $ROOT_DIR" exit 1 fi -# Using Lerna to generate the package list preserves the repository's -# configured package scope and therefore excludes packages/insight. -if ! "$LERNA" list --all --parseable > "$PACKAGE_LIST"; then - echo "ERROR: Unable to obtain the Lerna package list." +# This structured inventory establishes only the closed expected artifact set. +# Lerna exec remains responsible for per-package invocation and working dirs. +if ! node "$LIFECYCLE_COORDINATOR" discover \ + "$ROOT_DIR" "$LERNA" > "$PACKAGE_INVENTORY"; then + echo "ERROR: Unable to establish the managed-package inventory." exit 1 fi echo "Validating LavaMoat lifecycle policies..." echo -check_failures=0 -package_count=0 - -while IFS= read -r package_dir; do - [ -n "$package_dir" ] || continue - - package_count=$((package_count + 1)) - if ! package_name=$( - cd "$package_dir" && - node -p 'require("./package.json").name' - ); then - echo "ERROR: Unable to determine package name for:" - echo " $package_dir" - exit 1 - fi - - echo "Checking $package_name" - - if ( - cd "$package_dir" && - "$ALLOW_SCRIPTS" check > /dev/null - ); then - echo "PASS: $package_name" - elif node "$PLAN_ALLOWED_SCRIPTS" "$package_dir" > /dev/null; then - echo "WARN: $package_name has inactive denied lifecycle policies that are not installed on this platform." - echo "PASS: $package_name" - else - check_failures=$((check_failures + 1)) - - echo "FAIL: $package_name" - echo - echo "Current lifecycle inventory for $package_name:" - echo "------------------------------------------------------------" - - ( - cd "$package_dir" && - "$ALLOW_SCRIPTS" list - ) || true - - echo "------------------------------------------------------------" - fi - - echo -done < "$PACKAGE_LIST" +if ! package_count=$(node "$LIFECYCLE_COORDINATOR" count "$PACKAGE_INVENTORY"); then + echo "ERROR: Unable to count the managed packages." + exit 1 +fi if [ "$package_count" -eq 0 ]; then echo "ERROR: Lerna returned no managed packages." exit 1 fi -if [ "$check_failures" -ne 0 ]; then - echo "ERROR: LavaMoat policy validation failed for $check_failures package(s)." +if ! BITCORE_LIFECYCLE_PLAN_DIR="$PLAN_DIR" \ + "$LERNA" exec --concurrency 1 --no-bail --stream -- \ + node '$LERNA_ROOT_PATH/plan-allowed-scripts.js' .; then + echo + echo "ERROR: LavaMoat policy validation or lifecycle planning failed." + echo "Approved lifecycle scripts were not executed." + exit 1 +fi + +if ! node "$LIFECYCLE_COORDINATOR" global-plan \ + "$PACKAGE_INVENTORY" "$PLAN_DIR" > "$GLOBAL_PLAN"; then + echo + echo "ERROR: The global lifecycle execution plan is incomplete or invalid." echo "Approved lifecycle scripts were not executed." exit 1 fi @@ -148,145 +157,32 @@ echo echo "Planning approved dependency lifecycle execution..." echo -plan_failures=0 - -while IFS= read -r package_dir; do - [ -n "$package_dir" ] || continue - - if ! package_name=$( - cd "$package_dir" && - node -p 'require("./package.json").name' - ); then - echo "ERROR: Unable to determine package name for:" - echo " $package_dir" - exit 1 - fi - - if ! node "$PLAN_ALLOWED_SCRIPTS" "$package_dir" > "$CURRENT_SCRIPT_PATHS"; then - echo "FAIL: Unable to plan approved lifecycle scripts for $package_name." - echo - plan_failures=$((plan_failures + 1)) - continue - fi - - if ! duplicate_current_paths=$( - awk 'seen[$0]++ { print }' "$CURRENT_SCRIPT_PATHS" - ); then - echo "ERROR: Unable to check $package_name for duplicate approved paths." - exit 1 - fi - - if [ -n "$duplicate_current_paths" ]; then - echo "FAIL: $package_name resolves multiple approvals to the same path:" - echo "$duplicate_current_paths" - echo "The runner cannot safely invoke allow-scripts without executing that path more than once." - echo - plan_failures=$((plan_failures + 1)) - continue - fi - - path_count=0 - new_path_count=0 - seen_path_count=0 - - while IFS= read -r approved_path; do - [ -n "$approved_path" ] || continue - - path_count=$((path_count + 1)) - if grep -Fqx -- "$approved_path" "$SEEN_SCRIPT_PATHS"; then - seen_path_count=$((seen_path_count + 1)) - else - grep_status=$? - if [ "$grep_status" -ne 1 ]; then - echo "ERROR: Unable to read the approved lifecycle path plan." - exit 1 - fi - new_path_count=$((new_path_count + 1)) - fi - done < "$CURRENT_SCRIPT_PATHS" - - if [ "$path_count" -eq 0 ]; then - echo "SKIP: $package_name has no approved dependency lifecycle scripts." - echo - continue - fi - - if [ "$new_path_count" -ne 0 ] && [ "$seen_path_count" -ne 0 ]; then - echo "FAIL: $package_name has a partial overlap with an earlier package's approved paths." - echo "The runner cannot safely invoke allow-scripts without repeating a lifecycle script." - echo - plan_failures=$((plan_failures + 1)) - continue - fi - - if [ "$seen_path_count" -eq "$path_count" ]; then - echo "SKIP: $package_name's approved dependency scripts are already planned." - echo - continue - fi - - if ! cat "$CURRENT_SCRIPT_PATHS" >> "$SEEN_SCRIPT_PATHS"; then - echo "ERROR: Unable to update the approved lifecycle path plan." - exit 1 - fi - - if ! printf '%s\n' "$package_dir" >> "$RUN_PACKAGE_LIST"; then - echo "ERROR: Unable to update the package execution plan." - exit 1 - fi - - echo "PLAN: Run approved dependency lifecycle scripts for $package_name." - echo -done < "$PACKAGE_LIST" +if ! node "$LIFECYCLE_COORDINATOR" report "$GLOBAL_PLAN"; then + echo "ERROR: Unable to report the global lifecycle execution plan." + exit 1 +fi -if [ "$plan_failures" -ne 0 ]; then - echo "ERROR: Approved lifecycle execution planning failed for $plan_failures package(s)." +if [ "$CHECK_ONLY" = true ]; then + echo "All package policies and the approved lifecycle execution plan passed validation." echo "Approved lifecycle scripts were not executed." - exit 1 + exit 0 fi echo "Executing approved dependency lifecycle scripts..." echo -while IFS= read -r package_dir; do - [ -n "$package_dir" ] || continue - - if ! package_name=$( - cd "$package_dir" && - node -p 'require("./package.json").name' - ); then - echo "ERROR: Unable to determine package name for:" - echo " $package_dir" - exit 1 - fi - - echo "Running approved lifecycle scripts for $package_name" - - if ( - cd "$package_dir" && - "$ALLOW_SCRIPTS" run - ); then - echo "PASS: $package_name" - else - run_status=$? - - echo - echo "ERROR: Approved lifecycle execution failed for $package_name." - echo "Exit status: $run_status" - echo - echo "Current lifecycle inventory:" - echo "------------------------------------------------------------" - - ( - cd "$package_dir" && - "$ALLOW_SCRIPTS" list - ) || true - - echo "------------------------------------------------------------" - exit "$run_status" - fi +node "$LIFECYCLE_COORDINATOR" execute \ + "$GLOBAL_PLAN" "$ROOT_DIR" "$LERNA" "$LIFECYCLE_RUN_WRAPPER" & +ACTIVE_CHILD=$! +wait "$ACTIVE_CHILD" +run_status=$? +ACTIVE_CHILD= +if [ "$run_status" -ne 0 ]; then echo -done < "$RUN_PACKAGE_LIST" + echo "ERROR: Approved lifecycle execution failed." + echo "Exit status: $run_status" + exit "$run_status" +fi echo "Approved dependency lifecycle scripts completed successfully." From acef257c1f2cddb77072adced9601090ca6baff7 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 3 Aug 2026 13:50:34 -0400 Subject: [PATCH 15/17] fix root scripts & use lerna more fully --- .circleci/config.yml | 2 +- DEVELOPMENT.md | 648 +------ Dockerfile | 1 + lifecycle-plan-coordinator.js | 520 ----- package.json | 20 +- packages/bitcore-node/Dockerfile | 2 +- packages/bitcore-node/package.json | 1 - packages/bitcore-wallet-service/Dockerfile | 2 +- plan-allowed-scripts.js | 313 ---- run-allowed-scripts.js | 167 -- test/lerna-exec-contract.test.js | 407 ---- test/validate-and-run-allowed-scripts.test.js | 1668 ----------------- test/validate-lifecycle-policy.test.js | 136 ++ validate-and-run-allowed-scripts.sh | 188 -- validate-lifecycle-policy.js | 112 ++ 15 files changed, 357 insertions(+), 3830 deletions(-) delete mode 100644 lifecycle-plan-coordinator.js delete mode 100644 plan-allowed-scripts.js delete mode 100644 run-allowed-scripts.js delete mode 100644 test/lerna-exec-contract.test.js delete mode 100644 test/validate-and-run-allowed-scripts.test.js create mode 100644 test/validate-lifecycle-policy.test.js delete mode 100755 validate-and-run-allowed-scripts.sh create mode 100644 validate-lifecycle-policy.js diff --git a/.circleci/config.yml b/.circleci/config.yml index e25a9fd5a05..23bc88c2091 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -142,7 +142,7 @@ jobs: # - restore_dependency_cache - run: | # TODO figure out how to make this only run on a cache miss in restore_dependency_cache nvm use default - npm ci --ignore-scripts + npm run setup - persist_to_workspace: root: ~/bitcore/packages/crypto-rpc # only persist crypto-rpc package paths: diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 2b4e44d8f4f..6c6feb2596b 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,49 +1,11 @@ -# Bitcore Development Setup - -## Overview - -This repository uses LavaMoat `allow-scripts` to prevent dependency lifecycle scripts from executing automatically during installation. - -The repository-level `.npmrc` contains: - -```ini -ignore-scripts=true -``` - -As a result, running `npm ci` by itself installs only the root dependency tree. It does not: - -* run the former root `postinstall` workflow; -* bootstrap the Lerna-managed child packages; -* execute approved dependency lifecycle scripts; -* compile the monorepo. - -Use the repository setup command instead: - -```sh -npm run setup -``` - -This is the supported command for preparing a fresh local checkout. +# Bitcore development setup ## Prerequisites -Use the repository-supported versions of: - -* Node.js -* npm -* Python, where required by legacy build tooling -* Docker, where required by package tests or runtime services +CircleCI uses Node.js 22.13.1 and npm 10.9.2. Use those versions locally. +Some package workflows also require Python or Docker. -CircleCI currently uses Node.js `22.13.1` and npm `10.9.2`. - -Confirm your local versions with: - -```sh -node --version -npm --version -``` - -## Initial setup +## Set up a checkout From the repository root, run: @@ -51,561 +13,141 @@ From the repository root, run: npm run setup ``` -The setup command performs the following stages: - -1. Install root dependencies without running lifecycle scripts. -2. Bootstrap all Lerna-managed child dependency trees while lifecycle scripts remain disabled. -3. Validate each child package's committed LavaMoat policy. -4. Plan a deduplicated, fail-closed approved lifecycle execution. -5. Execute only the dependency lifecycle scripts explicitly approved by those policies. -6. Compile the monorepo in its required dependency order. - -The root scripts are: - -```json -{ - "setup": "npm ci --ignore-scripts && npm run setup:installed", - "setup:installed": "npm run bootstrap:inert && npm run allow-scripts:run && npm run compile", - "bootstrap:inert": "npm_config_ignore_scripts=true lerna bootstrap", - "allow-scripts:config": "lerna exec --concurrency 1 -- \"$PWD/node_modules/.bin/allow-scripts\" auto --skip-versions", - "allow-scripts:check": "./validate-and-run-allowed-scripts.sh --check-only", - "allow-scripts:run": "./validate-and-run-allowed-scripts.sh", - "lifecycle:approved": "npm run allow-scripts:run" -} -``` - -`lifecycle:approved` remains as a compatibility alias. New automation and -documentation should use the `allow-scripts:*` names. - -## Why `npm ci` is not enough - -Historically, the root `postinstall` script automatically bootstrapped and compiled the repository after installation. - -That behavior is intentionally no longer tied to npm's automatic lifecycle execution. npm's `ignore-scripts=true` setting disables both untrusted dependency lifecycle scripts and first-party lifecycle hooks such as `postinstall`. - -There is no npm setting that means: - -> Disable all dependency lifecycle scripts, but automatically run only this repository's root `postinstall`. - -Instead, the repository explicitly separates installation, approved dependency execution, and trusted first-party build commands. - -Therefore: - -```sh -npm ci --ignore-scripts -``` - -means: - -> Install the root dependency tree inertly. - -Whereas: - -```sh -npm run setup -``` - -means: - -> Fully prepare the Bitcore monorepo for development. - -## Setup stages - -### Root installation - -The first stage is: - -```sh -npm ci --ignore-scripts -``` - -The command-line option is deliberate. The committed `.npmrc` provides a safe -default, while `--ignore-scripts` prevents an ambient setting such as -`npm_config_ignore_scripts=false` from re-enabling dependency lifecycle scripts -inside the setup workflow. - -The intentionally hostile test package `@lavamoat/preinstall-always-fail` must remain denied. A successful inert installation proves that npm did not execute its lifecycle script. - -### Inert child bootstrap - -The next stage is: - -```sh -npm run bootstrap:inert -``` - -This expands to: - -```sh -npm_config_ignore_scripts=true lerna bootstrap -``` - -The explicit environment variable is required. - -The root `.npmrc` protects npm commands run from the repository root, but legacy Lerna invokes npm from child-package working directories. Those child npm processes do not reliably inherit the root `.npmrc`. - -Setting `npm_config_ignore_scripts=true` explicitly ensures lifecycle scripts remain disabled while all managed child dependency trees are installed. - -Do not run an unguarded command such as: - -```sh -lerna bootstrap -``` - -or: - -```sh -npm run bootstrap -``` - -The repository intentionally does not expose an unguarded `bootstrap` npm script. - -### LavaMoat policy validation - -After bootstrap, the repository runs: - -```sh -npm run allow-scripts:run -``` - -The underlying script first runs `allow-scripts check` from each Lerna-managed -child package directory. If that strict check fails only because a denied -dependency is not installed on the current platform, the repository planner -confirms that the inactive entries are all set to `false` and reports a -non-fatal warning. This permits one policy to deny macOS-only dependencies such -as `fsevents` while also validating on Linux. - -Each package has its own: - -* dependency tree; -* `package.json`; -* `lavamoat.allowScripts` policy; -* path-sensitive lifecycle dependency inventory. - -The current working directory determines which package policy `allow-scripts` inspects. - -The validation phase checks all 18 managed packages. It collects and reports all package-policy failures before terminating. Approved lifecycle scripts are not executed unless every package policy passes validation. - -A validation failure generally means one of the following: - -* a dependency with a lifecycle script was added but is not represented in policy; -* a dependency path or version changed; -* an approved policy entry no longer matches an installed dependency; -* the package lockfile and policy are out of sync. - -An inactive denied entry is not a validation failure because it cannot -authorize code. Missing policy entries and inactive approved entries remain -fatal. - -Do not bypass this failure by automatically approving new entries. - -Review the new lifecycle dependency, determine whether its script is necessary, and update policy only after completing the appropriate security and functional review. - -### Approved lifecycle execution planning - -After every policy passes, the runner builds a complete execution plan before -running any lifecycle script. - -For each package, the planner: - -* rejects top-level `install`, `postinstall`, `prepublish`, and `prepare` hooks, - because `allow-scripts run` would execute those hooks outside - `lavamoat.allowScripts`; -* rejects a top-level `binding.gyp`, because npm would synthesize an implicit - `node-gyp rebuild` install hook; -* resolves every approved dependency to its physical filesystem path; -* schedules a physical dependency tree only once when Lerna symlinks make it - visible through multiple package policies; -* rejects a package whose approvals only partially overlap an earlier - package's approvals, because invoking `allow-scripts run` would repeat the - overlapping lifecycle scripts. - -Planning failures are collected before execution begins. This preserves the -all-or-nothing validation boundary. - -Trusted first-party setup work belongs in an explicit root npm script, not in a -workspace lifecycle hook. - -To perform the same validation and planning without executing dependency -lifecycle scripts, run: - -```sh -npm run allow-scripts:check -``` - -This is useful after updating policy, during review, or as a separate CI gate. -It validates every managed package and the deduplicated execution plan, then -stops before `allow-scripts run` is invoked. - -### Approved dependency lifecycle execution - -Once validation and planning succeed, the runner invokes: - -```sh -allow-scripts run -``` - -only from package directories with newly scheduled approved dependency paths. - -Only dependency lifecycle paths explicitly set to `true` are allowed to execute. - -The current approved policies are narrowly limited to the required -`bcrypt#5.1.0` installation visible from: - -* `@bitpay-labs/bitcore-client`; -* `@bitpay-labs/bitcore-client` linked beneath `@bitpay-labs/bitcore-node`. - -Lerna resolves both policy paths to the same physical `bcrypt` directory, so -the planner executes its install script once. +This is the supported setup command locally and in CI. It: -All other reviewed lifecycle dependencies remain denied. +1. Runs `npm ci --ignore-scripts` for the root dependency tree. +2. Runs `lerna bootstrap --ci --concurrency 1 --ignore-scripts` to install and + link managed packages without lifecycle scripts. +3. Validates every managed package's committed LavaMoat policy before any + approved dependency script can run. +4. Runs `allow-scripts` in each managed package, executing only approved + dependency lifecycle scripts. +5. Compiles the monorepo in its required order while automatic `pre*` and + `post*` companions remain disabled. -The lifecycle runner stops immediately if an approved script fails. +The root `.npmrc` sets `ignore-scripts=true`, and setup also passes the option +explicitly. Lerna's `--ci` option gives local and CI bootstrap the same clean, +lockfile-based behavior. Bootstrap is serialized because parallel fresh Lerna +installs were observed to omit dependency files on macOS. -The repository uses the locally installed executable: +`npm ci` alone installs only the root dependencies; it does not bootstrap or +compile the monorepo. Do not replace `npm run setup` with a bare +`lerna bootstrap`. -```sh -node_modules/.bin/allow-scripts -``` - -Do not use an unrestricted `npx allow-scripts` command, because it may download or execute a package version other than the one committed to this repository. - -### Ordered monorepo compilation +## Compile and run -The final setup stage is: +After setup, recompile with: ```sh npm run compile ``` -Compilation must occur in the committed four-stage order: - -```json -{ - "compile": "npm run compile:bitcore-node-prereqs && npm run compile:bitcore-node-prod && npm run compile:remaining && npm run compile:bitcore-node", - "compile:bitcore-node-prereqs": "npm --prefix packages/bitcore-logging run compile && npm --prefix packages/crypto-wallet-core run compile", - "compile:bitcore-node-prod": "npm --prefix packages/bitcore-node run clean && npm --prefix packages/bitcore-node run build:prod", - "compile:remaining": "lerna run compile --ignore @bitpay-labs/bitcore-node --ignore @bitpay-labs/bitcore-logging --ignore @bitpay-labs/crypto-wallet-core", - "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node" -} -``` - -The ordering is significant. +Use this command instead of calling `lerna run compile` directly. It explicitly: -First, `bitcore-logging` and `crypto-wallet-core` are compiled because later packages require their generated output. +1. Compiles `bitcore-logging` and `crypto-wallet-core` prerequisites. +2. Runs the `bitcore-node` production build formerly triggered by + `bitcore-client`'s suppressed `precompile` hook. +3. Uses Lerna to compile the remaining packages in dependency order. +4. Compiles `bitcore-node` normally after its dependencies. +5. Creates the `bitcore-cli` executable link formerly created by its suppressed + `postbuild` hook. -Next, the production build for `bitcore-node` runs before the wider Lerna compilation. +The compile scripts pass `--ignore-scripts` or +`npm_config_ignore_scripts=true`, so explicitly requested scripts run without +automatically invoking their `pre*` or `post*` companions. -The remaining compilable packages then run, excluding packages already handled separately. - -Finally, `bitcore-node` runs its normal compile after its dependencies and related packages are ready. - -Do not replace this sequence with a single unordered: - -```sh -lerna run compile -``` - -The repository contains dependency-order and circularity constraints that the four-stage sequence resolves. - -## Subsequent development - -After the repository has been successfully prepared, it is not necessary to run a complete installation before every code change. - -To recompile: - -```sh -npm run compile -``` - -To run a package-specific test suite, use the corresponding root script. For example: +Common commands include: ```sh npm run test:bitcore-client npm run test:crypto-wallet-core npm run test:bitcore-node -``` - -To start Bitcore Node: - -```sh npm run node -``` - -To start Bitcore Wallet Service: - -```sh npm run bws ``` -## Clean setup - -Use a clean setup when: - -* dependency manifests or lockfiles change; -* LavaMoat policies change; -* native artifacts may be stale; -* lifecycle scripts have been run manually; -* switching between branches with dependency changes; -* diagnosing a setup or native-module failure. - -Remove all installed dependency trees: - -```sh -rm -rf node_modules +## Dependency lifecycle policy -find packages \ - -type d \ - -name node_modules \ - -prune \ - -exec rm -rf {} + -``` +Each managed package has a path-sensitive `lavamoat.allowScripts` policy: -Then run: +- Versionless `false` entries deny a dependency script by default, including + after dependency upgrades. +- Exact, versioned `true` entries approve only the reviewed release. -```sh -npm run setup -``` +The only current approval is `bcrypt#5.1.0` in +`@bitpay-labs/bitcore-client`. Bitcore Node reaches the same physical dependency +through Lerna's link to `bitcore-client`, so its nested policy denies the script +instead of executing it again. -## Dependency changes - -When adding, removing, or updating a dependency: - -1. Update the appropriate package manifest and lockfile. -2. Perform an inert installation or bootstrap. -3. Run `npm run allow-scripts:config` to add newly discovered lifecycle paths - as versionless denials. -4. Review every resulting `package.json` change and inspect affected packages - with `allow-scripts list` where necessary. -5. Keep new entries denied unless real Bitcore build, test, runtime, or CLI - behavior proves that the lifecycle-produced artifact is required. -6. For a required script, retain its versionless denial as the default and add - one exact, versioned, path-sensitive approval. -7. Run `npm run allow-scripts:check`. -8. Rerun the failing first-party behavior through `npm run allow-scripts:run`. -9. Reproduce the result from a clean installation. -10. Confirm platform-dependent results in Linux CI. - -### Policy versioning - -Use a hybrid versioning policy for `lavamoat.allowScripts`: - -* Entries set to `true` must include the exact reviewed dependency version. -* Entries set to `false` omit the final `#version` suffix. -* An approved dependency may have both a versionless `false` baseline and an - exact versioned `true` exception. - -For example: - -```json -{ - "lavamoat": { - "allowScripts": { - "secp256k1": false, - "@bitpay-labs/crypto-wallet-core>tiny-secp256k1": false, - "bcrypt": false, - "bcrypt#5.1.0": true, - "@bitpay-labs/bitcore-client>bcrypt": false, - "@bitpay-labs/bitcore-client>bcrypt#5.1.0": true - } - } -} -``` +Before `allow-scripts run`, `npm run allow-scripts:validate` fails if any managed +package has: -A versionless denied entry remains denied when that dependency is upgraded, -which reduces policy churn. It applies only to the same path-sensitive -dependency name; a new package or dependency path remains unconfigured and -causes validation to fail. +- a missing dependency policy; +- a non-boolean decision; +- a `true` approval that isn't versioned, or an inactive approval; +- a top-level `preinstall`, `install`, `postinstall`, `prepublish`, or `prepare` + hook; +- a top-level `binding.gyp`, which implies an install hook. -An approved entry remains version-pinned so an unreviewed future release cannot -inherit permission to execute lifecycle code. +Inactive denials are accepted because platform-specific dependencies may be +absent. Inactive approvals are rejected. No approved dependency script runs +unless validation succeeds for every managed package. -The developer-only configuration command runs `allow-scripts auto ---skip-versions` in each managed package. In this mode, `allow-scripts` adds -newly detected lifecycle paths as versionless `false` entries. It does not -grant permission to execute them. It may add a versionless denial alongside an -existing pinned approval; that is the expected default-deny plus exact-exception -representation. +The root dependency `@lavamoat/preinstall-always-fail` is an installation +canary: setup succeeds only while the root install remains inert. Keep trusted +first-party setup work in explicitly named root scripts, not workspace install +hooks. -Validation and execution deliberately do not pass `--skip-versions`. Normal -matching recognizes versionless `false` entries but requires a `true` entry to -match the installed version exactly. Never change a generated versionless -denial to `true`, and never run `allow-scripts run --skip-versions`, because -that would make approval version-agnostic. +## Update dependencies -`allow-scripts:config` is a maintenance command, not part of `setup` or CI. It -updates tracked manifests, so always review its diff. CI must report missing or -stale policy instead of modifying policy automatically. +When adding or updating a dependency: -### Why configuration iterates Lerna packages +1. Update its manifest and lockfile. +2. Install without lifecycle scripts: -`allow-scripts` inspects the dependency tree and `package.json` in its current -working directory. Running it once from the repository root would inspect only -the root dependency tree, not the 18 separately bootstrapped child trees. -Package-by-package execution is therefore necessary. + ```sh + npm ci --ignore-scripts + npm run bootstrap:inert + ``` -A command such as: +3. Populate new lifecycle paths as versionless denials: -```sh -lerna exec -- npx allow-scripts auto --skip-versions -``` + ```sh + npm run allow-scripts:config + ``` -is a concise way to enter every Lerna package, which is why it may be suggested. -The Lerna part solves a real package-scoping problem; `npx` is unnecessary and -less deterministic here. If a suitable local binary is not found, `npx` can -resolve or download a different package/version rather than guaranteeing the -one in the root lockfile. +4. Review every policy change. Approve a script only when Bitcore requires its + generated artifact, and use an exact versioned `true` entry. +5. Run `npm run allow-scripts:validate`. +6. Run `npm run setup` from clean dependency trees and confirm Linux CI. -The committed npm command keeps Lerna's authoritative package scope but passes -it an absolute path to the root `node_modules/.bin/allow-scripts` executable. -The npm shell expands `$PWD` before Lerna enters each package, guaranteeing the -root-lockfile version. `--concurrency 1` keeps policy updates and output serial. -No additional orchestration script is required. +`allow-scripts:config` uses Lerna to inspect every managed dependency tree with +the root-locked executable. It does not use `npx` or approve scripts +automatically. Always review the manifest changes it produces. -Do not approve lifecycle scripts merely because a package declares one or because installation reports an unconfigured entry. +## CI, Docker, and Insight -## `packages/insight` - -`packages/insight` is intentionally excluded from Lerna package discovery by `lerna.json`. - -Therefore, the standard setup workflow does not: - -* install Insight dependencies; -* inspect an Insight LavaMoat policy; -* execute Insight dependency lifecycle scripts; -* compile Insight. - -The existing `insight:build` command is a separate workflow and is not covered by the reviewed LavaMoat setup process. - -Treat changes to that workflow separately. - -## CI and Docker parity - -CircleCI uses the same repository-owned setup command as local development: - -```sh -npm run setup -``` - -This ensures that local and CI setup use the same: - -* inert root installation; -* guarded Lerna bootstrap; -* package-policy validation; -* approved lifecycle execution; -* compilation ordering. - -CircleCI remains responsible for environment-specific orchestration, including: - -* selecting Node and Python versions; -* restoring and saving caches; -* persisting workspaces; -* starting service containers; -* collecting artifacts and coverage; -* running downstream jobs. - -Repository setup behavior belongs in version-controlled npm and shell scripts rather than being reimplemented in CircleCI YAML. - -The Bitcore Node and Bitcore Wallet Service Dockerfiles install the root tree -with `npm ci --ignore-scripts`, copy the lifecycle runner and planner, and then -run: +CircleCI runs `npm run setup`. Dockerfiles split the equivalent flow into: ```sh +npm ci --ignore-scripts npm run setup:installed ``` -This avoids a second root installation inside the image while preserving the -same inert bootstrap, lifecycle validation, deduplicated execution, and ordered -compilation. - -## Troubleshooting - -### `allow-scripts - allowlist needs update` - -Run the non-executing lifecycle check to identify every failing package: - -```sh -npm run allow-scripts:check -``` - -The validation phase will print the current lifecycle inventory for each package whose policy does not match its installed tree. - -Review the dependency change rather than immediately approving it. +`setup:installed` assumes root dependencies are already installed; developers +should normally use `npm run setup`. -### Lifecycle execution planning fails - -Do not bypass planning failures by invoking `allow-scripts run` manually. - -If a workspace defines a top-level lifecycle hook, move that trusted operation -to an explicit root setup script. - -If approved dependency paths overlap, review their real paths and policies. -The runner safely skips complete overlaps, but rejects partial overlaps because -the `allow-scripts` CLI cannot execute only the non-overlapping subset. - -### Missing `bcrypt_lib.node` - -This indicates that the approved `bcrypt#5.1.0` lifecycle script did not run successfully for the affected package tree. - -Run: - -```sh -npm run allow-scripts:run -``` - -Then confirm the generated native binding exists: - -```sh -find packages \ - -path '*/node_modules/bcrypt/lib/binding/*/bcrypt_lib.node' \ - -print -``` +`packages/insight` is excluded by `lerna.json`, so standard setup does not +install, inspect, or compile it. Use `npm run insight:build` for that separate +package. -### Package compilation fails because generated sibling output is missing - -Run the complete ordered compile: - -```sh -npm run compile -``` - -Do not replace it with an unordered Lerna compile. - -### Local checkout appears partially installed - -Remove root and child `node_modules` directories and rerun: - -```sh -npm run setup -``` - -### Shell script reports `Permission denied` - -Confirm the lifecycle runner is executable: - -```sh -ls -l validate-and-run-allowed-scripts.sh -git ls-files -s validate-and-run-allowed-scripts.sh -``` - -The Git mode should be: - -```text -100755 -``` - -## Security summary - -The setup model is: - -```text -Install code with an explicit dependency-lifecycle-script prohibition -→ validate committed path-sensitive policies -→ reject implicit workspace hooks and deduplicate physical dependency paths -→ execute only reviewed dependency lifecycle scripts -→ execute trusted first-party bootstrap and build commands explicitly -``` - -LavaMoat does not prevent the repository from bootstrapping or compiling. +## Troubleshooting -It prevents dependency installation from silently deciding which executable code is allowed to run. +- Unconfigured dependency: run `npm run allow-scripts:config`, review the new + denial, and rerun setup. Do not approve it without reviewing its script. +- Forbidden workspace hook: move trusted work to an explicit root setup or + compile script; do not bypass validation. +- Missing `bcrypt` native binding: rerun setup. If the version changed, review + the new release before updating the pinned approval. +- Missing generated output after dependency or branch changes: remove the root + and package `node_modules` directories, then run `npm run setup`. diff --git a/Dockerfile b/Dockerfile index a0c3bc40255..f4a1dd1eb53 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,3 +24,4 @@ WORKDIR /bitcore ADD . . RUN npm ci --ignore-scripts +RUN npm run setup:installed diff --git a/lifecycle-plan-coordinator.js b/lifecycle-plan-coordinator.js deleted file mode 100644 index 6cd70ef69ce..00000000000 --- a/lifecycle-plan-coordinator.js +++ /dev/null @@ -1,520 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -/* eslint-disable @typescript-eslint/no-require-imports */ - -// Establish the closed Lerna package inventory and validate the complete set -// of per-package lifecycle-plan artifacts. This script never runs lifecycle -// scripts or invokes commands in package directories. - -const { spawn, spawnSync } = require('node:child_process'); -const crypto = require('node:crypto'); -const fs = require('node:fs'); -const path = require('node:path'); - -const ARTIFACT_SCHEMA_VERSION = 1; -const INVENTORY_SCHEMA_VERSION = 1; - -function isContainedBy(rootDir, candidate) { - const relative = path.relative(rootDir, candidate); - return relative !== '' && relative !== '..' && - !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative); -} - -function artifactNameForPackage(packageName) { - return `${crypto.createHash('sha256').update(packageName).digest('hex')}.json`; -} - -function parseDiscoveryOutput(rootDirArgument, output) { - const rootDir = fs.realpathSync(rootDirArgument); - let discovered; - try { - discovered = JSON.parse(output); - } catch (error) { - throw new Error(`Lerna discovery output is not valid JSON: ${error.message}`); - } - - if (!Array.isArray(discovered) || discovered.length === 0) { - throw new Error('Lerna discovery output must be a non-empty JSON array.'); - } - - const names = new Set(); - const locations = new Set(); - const packages = discovered.map((entry, index) => { - if (!entry || typeof entry !== 'object' || Array.isArray(entry) || - typeof entry.name !== 'string' || entry.name.length === 0 || - typeof entry.location !== 'string' || entry.location.length === 0) { - throw new Error( - `Lerna discovery entry ${index} must contain non-empty name and location fields.` - ); - } - if (entry.name.includes('\n') || entry.location.includes('\n')) { - throw new Error(`Lerna discovery entry ${index} contains a newline.`); - } - - let location; - try { - location = fs.realpathSync(path.resolve(rootDir, entry.location)); - } catch (error) { - throw new Error( - `Lerna package ${entry.name} has an invalid location: ${error.message}` - ); - } - if (!isContainedBy(rootDir, location)) { - throw new Error( - `Lerna package ${entry.name} is outside the repository: ${location}` - ); - } - if (names.has(entry.name)) { - throw new Error(`Lerna discovery contains duplicate package name ${entry.name}.`); - } - if (locations.has(location)) { - throw new Error( - `Lerna discovery contains duplicate package location ${location}.` - ); - } - names.add(entry.name); - locations.add(location); - return { name: entry.name, location }; - }); - - const insightLocation = path.join(rootDir, 'packages', 'insight'); - if (packages.some(packageEntry => packageEntry.location === insightLocation)) { - throw new Error('Lerna discovery unexpectedly included excluded packages/insight.'); - } - - return { schemaVersion: INVENTORY_SCHEMA_VERSION, packages }; -} - -function discoverPackages(rootDir, lernaExecutable) { - const result = spawnSync( - lernaExecutable, - ['list', '--all', '--json', '--loglevel', 'silent'], - { cwd: rootDir, encoding: 'utf8', maxBuffer: 10 * 1024 * 1024 } - ); - if (result.error) { - throw new Error(`Unable to run Lerna discovery: ${result.error.message}`); - } - if (result.status !== 0) { - throw new Error( - `Lerna discovery failed with status ${result.status}: ${result.stderr.trim()}` - ); - } - return parseDiscoveryOutput(rootDir, result.stdout); -} - -function readInventory(inventoryPath) { - let inventory; - try { - inventory = JSON.parse(fs.readFileSync(inventoryPath, 'utf8')); - } catch (error) { - throw new Error(`Managed-package inventory is invalid: ${error.message}`); - } - if (!inventory || typeof inventory !== 'object' || Array.isArray(inventory) || - inventory.schemaVersion !== INVENTORY_SCHEMA_VERSION || - !Array.isArray(inventory.packages) || inventory.packages.length === 0) { - throw new Error('Managed-package inventory has an unsupported shape.'); - } - return inventory; -} - -function validateArtifact(artifact, expectedPackage) { - const expectedKeys = [ - 'approvedPaths', - 'packageDir', - 'packageName', - 'schemaVersion', - 'status' - ]; - if (!artifact || typeof artifact !== 'object' || Array.isArray(artifact) || - Object.keys(artifact).sort().join('\0') !== expectedKeys.join('\0') || - artifact.schemaVersion !== ARTIFACT_SCHEMA_VERSION || - artifact.status !== 'validated' || !Array.isArray(artifact.approvedPaths)) { - throw new Error(`Lifecycle plan for ${expectedPackage.name} is malformed.`); - } - if (artifact.packageName !== expectedPackage.name) { - throw new Error( - `Lifecycle plan package-name mismatch: expected ${expectedPackage.name}, ` + - `received ${String(artifact.packageName)}.` - ); - } - if (artifact.packageDir !== expectedPackage.location) { - throw new Error( - `Lifecycle plan package-location mismatch for ${expectedPackage.name}: ` + - `expected ${expectedPackage.location}, received ${String(artifact.packageDir)}.` - ); - } - - const seenPaths = new Set(); - for (const approvedPath of artifact.approvedPaths) { - let canonicalPath; - try { - canonicalPath = typeof approvedPath === 'string' && approvedPath.length > 0 && - path.isAbsolute(approvedPath) && !approvedPath.includes('\n') - ? fs.realpathSync(approvedPath) - : null; - } catch { - canonicalPath = null; - } - if (canonicalPath !== approvedPath) { - throw new Error( - `Lifecycle plan for ${expectedPackage.name} contains a non-canonical path.` - ); - } - if (seenPaths.has(approvedPath)) { - throw new Error( - `Lifecycle plan for ${expectedPackage.name} contains a duplicate approved path.` - ); - } - seenPaths.add(approvedPath); - } -} - -function validateArtifactSet(inventory, planDirectoryArgument) { - const planDirectory = fs.realpathSync(planDirectoryArgument); - const expectedByFilename = new Map(); - for (const packageEntry of inventory.packages) { - expectedByFilename.set(artifactNameForPackage(packageEntry.name), packageEntry); - } - - const files = fs.readdirSync(planDirectory); - const seenPackageNames = new Set(); - const artifacts = new Map(); - for (const filename of files) { - const artifactPath = path.join(planDirectory, filename); - const stat = fs.lstatSync(artifactPath); - if (!stat.isFile() || stat.isSymbolicLink()) { - throw new Error(`Unexpected lifecycle plan artifact ${filename}.`); - } - - let artifact; - try { - artifact = JSON.parse(fs.readFileSync(artifactPath, 'utf8')); - } catch (error) { - throw new Error(`Lifecycle plan artifact ${filename} is malformed: ${error.message}`); - } - if (artifact && typeof artifact.packageName === 'string') { - if (seenPackageNames.has(artifact.packageName)) { - throw new Error(`Duplicate lifecycle plan artifacts for ${artifact.packageName}.`); - } - seenPackageNames.add(artifact.packageName); - } - - const expectedPackage = expectedByFilename.get(filename); - if (!expectedPackage) { - throw new Error(`Unexpected lifecycle plan artifact ${filename}.`); - } - validateArtifact(artifact, expectedPackage); - artifacts.set(expectedPackage.name, artifact); - } - - for (const expectedPackage of inventory.packages) { - if (!artifacts.has(expectedPackage.name)) { - throw new Error(`Missing lifecycle plan artifact for ${expectedPackage.name}.`); - } - } - return inventory.packages.map(packageEntry => artifacts.get(packageEntry.name)); -} - -function setsOverlap(left, right) { - const rightPaths = new Set(right); - return left.some(approvedPath => rightPaths.has(approvedPath)); -} - -function buildGlobalPlan(inventory, artifacts) { - if (artifacts.length !== inventory.packages.length || - artifacts.some((artifact, index) => - artifact.packageName !== inventory.packages[index].name || - artifact.packageDir !== inventory.packages[index].location - )) { - throw new Error('Artifact collection does not match the package inventory.'); - } - const groupsByKey = new Map(); - const packagePlans = artifacts.map(artifact => ({ - name: artifact.packageName, - location: artifact.packageDir, - approvedPaths: [...artifact.approvedPaths].sort(), - selected: false - })); - - for (const packagePlan of packagePlans) { - if (packagePlan.approvedPaths.length === 0) { - continue; - } - const key = JSON.stringify(packagePlan.approvedPaths); - let group = groupsByKey.get(key); - if (!group) { - group = { - approvedPaths: packagePlan.approvedPaths, - packageNames: [], - representative: { - name: packagePlan.name, - location: packagePlan.location - } - }; - groupsByKey.set(key, group); - packagePlan.selected = true; - } - group.packageNames.push(packagePlan.name); - } - - const groups = Array.from(groupsByKey.values()); - for (let leftIndex = 0; leftIndex < groups.length; leftIndex += 1) { - for (let rightIndex = leftIndex + 1; rightIndex < groups.length; - rightIndex += 1) { - const left = groups[leftIndex]; - const right = groups[rightIndex]; - if (setsOverlap(left.approvedPaths, right.approvedPaths)) { - throw new Error( - `${right.representative.name} has a partial overlap with ` + - `${left.representative.name}'s approved paths.` - ); - } - } - } - - const selectedPackages = packagePlans - .filter(packagePlan => packagePlan.selected) - .map(packagePlan => ({ - name: packagePlan.name, - location: packagePlan.location - })); - validateGlobalPlan(packagePlans, groups, selectedPackages); - return { - schemaVersion: 1, - packages: packagePlans, - groups, - selectedPackages - }; -} - -function validateGlobalPlan(packagePlans, groups, selectedPackages) { - const selectedNames = new Set( - selectedPackages.map(packageEntry => packageEntry.name) - ); - if (selectedNames.size !== selectedPackages.length) { - throw new Error('The global lifecycle plan selects a package more than once.'); - } - - const pathOwners = new Map(); - const representativeNames = new Set(); - for (const group of groups) { - if (group.approvedPaths.length === 0 || group.packageNames.length === 0 || - !group.packageNames.includes(group.representative.name) || - !selectedNames.has(group.representative.name)) { - throw new Error('The global lifecycle plan contains an invalid group.'); - } - if (representativeNames.has(group.representative.name)) { - throw new Error('A package represents multiple lifecycle groups.'); - } - representativeNames.add(group.representative.name); - for (const approvedPath of group.approvedPaths) { - if (pathOwners.has(approvedPath)) { - throw new Error( - `Approved path ${approvedPath} belongs to multiple lifecycle groups.` - ); - } - pathOwners.set(approvedPath, group.representative.name); - } - } - if (representativeNames.size !== selectedNames.size || - Array.from(selectedNames).some(name => !representativeNames.has(name))) { - throw new Error( - 'The selected packages do not match the lifecycle group representatives.' - ); - } - for (const selectedPackage of selectedPackages) { - const packagePlan = packagePlans.find( - candidate => candidate.name === selectedPackage.name - ); - const group = groups.find( - candidate => candidate.representative.name === selectedPackage.name - ); - if (!packagePlan || !group || !packagePlan.selected || - packagePlan.approvedPaths.length === 0 || - packagePlan.location !== selectedPackage.location || - group.representative.location !== selectedPackage.location) { - throw new Error( - `Selected package ${selectedPackage.name} has an invalid identity.` - ); - } - } - - for (const packagePlan of packagePlans) { - if (packagePlan.selected !== selectedNames.has(packagePlan.name) || - (packagePlan.approvedPaths.length === 0 && packagePlan.selected)) { - throw new Error( - `The global lifecycle plan has an invalid selection for ${packagePlan.name}.` - ); - } - if (packagePlan.approvedPaths.some( - approvedPath => !pathOwners.has(approvedPath) - )) { - throw new Error( - `The global lifecycle plan omitted an approved path for ${packagePlan.name}.` - ); - } - if (packagePlan.approvedPaths.length > 0) { - const matchingGroups = groups.filter(group => - group.approvedPaths.length === packagePlan.approvedPaths.length && - group.approvedPaths.every( - (approvedPath, index) => approvedPath === packagePlan.approvedPaths[index] - ) && group.packageNames.includes(packagePlan.name) - ); - if (matchingGroups.length !== 1) { - throw new Error( - `${packagePlan.name} does not belong to exactly one lifecycle group.` - ); - } - } - } -} - -function readGlobalPlan(globalPlanPath) { - const globalPlan = JSON.parse(fs.readFileSync(globalPlanPath, 'utf8')); - if (!globalPlan || typeof globalPlan !== 'object' || - globalPlan.schemaVersion !== 1 || !Array.isArray(globalPlan.packages) || - !Array.isArray(globalPlan.groups) || - !Array.isArray(globalPlan.selectedPackages)) { - throw new Error('The global lifecycle plan artifact is malformed.'); - } - return globalPlan; -} - -function exactScopePattern(packageName) { - return packageName.replace(/([*?[\]{}()!+@\\])/g, '\\$1'); -} - -function buildExecutionArgs(selectedPackages) { - if (selectedPackages.length === 0) { - return null; - } - const args = ['exec', '--concurrency', '1', '--stream']; - for (const packageEntry of selectedPackages) { - args.push('--scope', exactScopePattern(packageEntry.name)); - } - args.push('--', 'node', '"$BITCORE_LIFECYCLE_RUN_WRAPPER"'); - return args; -} - -async function executeGlobalPlan( - globalPlan, - rootDir, - lernaExecutable, - executionWrapper -) { - const args = buildExecutionArgs(globalPlan.selectedPackages); - if (!args) { - console.log('No approved dependency lifecycle scripts were required.'); - return 0; - } - - const child = spawn(lernaExecutable, args, { - cwd: rootDir, - env: { - ...process.env, - BITCORE_LIFECYCLE_RUN_WRAPPER: executionWrapper - }, - stdio: 'inherit' - }); - let requestedSignal; - const signalHandlers = new Map(); - for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { - const handler = () => { - if (!requestedSignal) { - requestedSignal = signal; - child.kill(signal); - } - }; - signalHandlers.set(signal, handler); - process.on(signal, handler); - } - - const result = await new Promise((resolve, reject) => { - child.once('error', reject); - child.once('close', (code, signal) => resolve({ code, signal })); - }); - for (const [signal, handler] of signalHandlers) { - process.off(signal, handler); - } - if (requestedSignal) { - return { SIGHUP: 129, SIGINT: 130, SIGTERM: 143 }[requestedSignal]; - } - if (result.signal) { - return { SIGHUP: 129, SIGINT: 130, SIGTERM: 143 }[result.signal] || 1; - } - return result.code ?? 1; -} - -async function main() { - const [command, ...args] = process.argv.slice(2); - if (command === 'discover' && args.length === 2) { - process.stdout.write(`${JSON.stringify(discoverPackages(args[0], args[1]))}\n`); - return; - } - if (command === 'count' && args.length === 1) { - process.stdout.write(`${readInventory(args[0]).packages.length}\n`); - return; - } - if (command === 'global-plan' && args.length === 2) { - const inventory = readInventory(args[0]); - const artifacts = validateArtifactSet(inventory, args[1]); - process.stdout.write(`${JSON.stringify(buildGlobalPlan(inventory, artifacts))}\n`); - return; - } - if (command === 'report' && args.length === 1) { - const globalPlan = readGlobalPlan(args[0]); - for (const packagePlan of globalPlan.packages) { - if (packagePlan.approvedPaths.length === 0) { - console.log( - `SKIP: ${packagePlan.name} has no approved dependency lifecycle scripts.\n` - ); - } else if (packagePlan.selected) { - console.log( - `PLAN: Run approved dependency lifecycle scripts for ${packagePlan.name}.\n` - ); - } else { - console.log( - `SKIP: ${packagePlan.name}'s approved dependency scripts are already planned.\n` - ); - } - } - return; - } - if (command === 'execute' && args.length === 4) { - const globalPlan = readGlobalPlan(args[0]); - const status = await executeGlobalPlan( - globalPlan, - args[1], - args[2], - args[3] - ); - process.exitCode = status; - return; - } - throw new Error( - 'Usage: lifecycle-plan-coordinator.js ' + - 'discover ROOT LERNA | count INVENTORY | ' + - 'global-plan INVENTORY PLAN_DIR | report GLOBAL_PLAN | ' + - 'execute GLOBAL_PLAN ROOT LERNA WRAPPER' - ); -} - -if (require.main === module) { - main().catch(error => { - console.error(`ERROR: ${error.message}`); - process.exitCode = 1; - }); -} - -module.exports = { - artifactNameForPackage, - buildExecutionArgs, - buildGlobalPlan, - exactScopePattern, - executeGlobalPlan, - parseDiscoveryOutput, - validateArtifactSet, - validateGlobalPlan -}; diff --git a/package.json b/package.json index e322d0f276e..e34f4e3bdff 100644 --- a/package.json +++ b/package.json @@ -6,20 +6,20 @@ "watch": "lerna run watch --parallel", "setup": "npm ci --ignore-scripts && npm run setup:installed", "setup:installed": "npm run bootstrap:inert && npm run allow-scripts:run && npm run compile", - "bootstrap:inert": "npm_config_ignore_scripts=true lerna bootstrap", + "bootstrap:inert": "lerna bootstrap --ci --concurrency 1 --ignore-scripts", + "allow-scripts:run": "npm run allow-scripts:validate && lerna exec --concurrency 1 --stream -- \"$PWD/node_modules/.bin/allow-scripts\" run", + "allow-scripts:validate": "lerna exec --concurrency 1 --no-bail --stream -- node \"$PWD/validate-lifecycle-policy.js\"", + "compile": "npm run compile:bitcore-node-prereqs && npm run compile:bitcore-node-prod && npm run compile:remaining && npm run compile:bitcore-node && npm run compile:bitcore-cli-postbuild", + "compile:bitcore-node-prereqs": "npm --ignore-scripts --prefix packages/bitcore-logging run compile && npm --ignore-scripts --prefix packages/crypto-wallet-core run compile", + "compile:bitcore-node-prod": "npm --ignore-scripts --prefix packages/bitcore-node run clean && npm --ignore-scripts --prefix packages/bitcore-node run build:prod", + "compile:remaining": "npm_config_ignore_scripts=true lerna run compile --ignore @bitpay-labs/bitcore-node --ignore @bitpay-labs/bitcore-logging --ignore @bitpay-labs/crypto-wallet-core", + "compile:bitcore-node": "npm_config_ignore_scripts=true lerna run compile --scope @bitpay-labs/bitcore-node", + "compile:bitcore-cli-postbuild": "npm --ignore-scripts --prefix packages/bitcore-cli run postbuild", "allow-scripts:config": "lerna exec --concurrency 1 -- \"$PWD/node_modules/.bin/allow-scripts\" auto --skip-versions", - "allow-scripts:check": "./validate-and-run-allowed-scripts.sh --check-only", - "allow-scripts:run": "./validate-and-run-allowed-scripts.sh", - "lifecycle:approved": "npm run allow-scripts:run", - "compile": "npm run compile:bitcore-node-prereqs && npm run compile:bitcore-node-prod && npm run compile:remaining && npm run compile:bitcore-node", "insight:build": "cd ./packages/insight && npm i && npm run build", "node": "cd packages/bitcore-node && npm start", "bws": "cd packages/bitcore-wallet-service && npm start", - "compile:bitcore-node-prereqs": "npm --prefix packages/bitcore-logging run compile && npm --prefix packages/crypto-wallet-core run compile", - "compile:bitcore-node-prod": "npm --prefix packages/bitcore-node run clean && npm --prefix packages/bitcore-node run build:prod", - "compile:remaining": "lerna run compile --ignore @bitpay-labs/bitcore-node --ignore @bitpay-labs/bitcore-logging --ignore @bitpay-labs/crypto-wallet-core", - "compile:bitcore-node": "lerna run compile --scope @bitpay-labs/bitcore-node", - "test:lifecycle-runner": "node --test test/validate-and-run-allowed-scripts.test.js test/lerna-exec-contract.test.js", + "test:lifecycle-policy": "node --test test/validate-lifecycle-policy.test.js", "lint": "eslint .", "fix:errors": "eslint --fix --quiet .", "fix:all": "eslint --fix .", diff --git a/packages/bitcore-node/Dockerfile b/packages/bitcore-node/Dockerfile index 209668e54d0..63935a67be2 100644 --- a/packages/bitcore-node/Dockerfile +++ b/packages/bitcore-node/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /bitcore # NOTE(danny): not the most optimal layering, but it works for now COPY lerna.json ./ COPY package*.json ./ -COPY lifecycle-plan-coordinator.js plan-allowed-scripts.js run-allowed-scripts.js validate-and-run-allowed-scripts.sh ./ +COPY validate-lifecycle-policy.js ./ COPY packages/ ./packages/ # Install dependencies and build diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index 431f83abfdc..428f83e6916 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -109,7 +109,6 @@ "allowScripts": { "@bitpay-labs/bitcore-client>bcrypt": false, "@bitpay-labs/bitcore-client>@bitpay-labs/crypto-wallet-core>xrpl>bip32>tiny-secp256k1": false, - "@bitpay-labs/bitcore-client>bcrypt#5.1.0": true, "@bitpay-labs/bitcore-client>leveldown": false, "@bitpay-labs/bitcore-client>secp256k1": false, "@bitpay-labs/bitcore-wallet-client>@bitpay-labs/bitcore-tss>@bitgo/sdk-lib-mpc>cbor-x>cbor-extract": false, diff --git a/packages/bitcore-wallet-service/Dockerfile b/packages/bitcore-wallet-service/Dockerfile index e8b2e6d2374..de10f95e823 100644 --- a/packages/bitcore-wallet-service/Dockerfile +++ b/packages/bitcore-wallet-service/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /bitcore # NOTE(danny): not the most optimal layering, but it works for now COPY lerna.json ./ COPY package*.json ./ -COPY lifecycle-plan-coordinator.js plan-allowed-scripts.js run-allowed-scripts.js validate-and-run-allowed-scripts.sh ./ +COPY validate-lifecycle-policy.js ./ COPY packages/ ./packages/ # Install dependencies and build diff --git a/plan-allowed-scripts.js b/plan-allowed-scripts.js deleted file mode 100644 index 30753b4282a..00000000000 --- a/plan-allowed-scripts.js +++ /dev/null @@ -1,313 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -/* eslint-disable @typescript-eslint/no-require-imports */ - -// Build a fail-closed lifecycle-script plan for one workspace package. In a -// Lerna child, this writes one structured artifact for the root coordinator. -// -// THIS SCRIPT NEVER RUNS LIFECYCLE SCRIPTS ITSELF. - -const crypto = require('node:crypto'); -const fs = require('node:fs'); -const path = require('node:path'); -const { loadAllPackageConfigurations } = require('@lavamoat/allow-scripts'); - -const ARTIFACT_SCHEMA_VERSION = 1; -const PLAN_DIRECTORY_ENV = 'BITCORE_LIFECYCLE_PLAN_DIR'; - -const IMPLICIT_TOP_LEVEL_EVENTS = [ - 'install', - 'postinstall', - 'prepublish', - 'prepare' -]; - -function readPackageJson(packageDir) { - const packageJsonPath = path.join(packageDir, 'package.json'); - return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); -} - -function artifactNameForPackage(packageName) { - return `${crypto.createHash('sha256').update(packageName).digest('hex')}.json`; -} - -function validatePackageIdentity(packageName, packageDir) { - if (typeof packageName !== 'string' || packageName.length === 0) { - throw new Error(`${packageDir} does not define a non-empty package name.`); - } - - const lernaPackageName = process.env.LERNA_PACKAGE_NAME; - if (process.env[PLAN_DIRECTORY_ENV] && !lernaPackageName) { - throw new Error( - 'LERNA_PACKAGE_NAME is required when writing a plan artifact.' - ); - } - if (lernaPackageName && lernaPackageName !== packageName) { - throw new Error( - `Lerna package identity mismatch: expected ${packageName}, received ` + - `${lernaPackageName}.` - ); - } - - const lernaRootPath = process.env.LERNA_ROOT_PATH; - if (process.env[PLAN_DIRECTORY_ENV] && !lernaRootPath) { - throw new Error('LERNA_ROOT_PATH is required when writing a plan artifact.'); - } - if (lernaRootPath) { - const rootDir = fs.realpathSync(lernaRootPath); - const relativePackageDir = path.relative(rootDir, packageDir); - if ( - relativePackageDir === '' || - relativePackageDir === '..' || - relativePackageDir.startsWith(`..${path.sep}`) || - path.isAbsolute(relativePackageDir) - ) { - throw new Error(`${packageName} is not contained by LERNA_ROOT_PATH.`); - } - } -} - -function validatePolicyDecisions(packageName, packageJson) { - const allowConfig = packageJson.lavamoat?.allowScripts || {}; - for (const [pattern, decision] of Object.entries(allowConfig)) { - if (typeof decision !== 'boolean') { - throw new Error( - `${packageName}'s policy decision for ${pattern} must be boolean.` - ); - } - if (decision && !pattern.includes('#')) { - throw new Error( - `${packageName}'s approval for ${pattern} must include a version.` - ); - } - } -} - -function hasInvalidPackageEntries(packagesWithScripts) { - for (const [pattern, packages] of packagesWithScripts) { - if (typeof pattern !== 'string' || !Array.isArray(packages) || - packages.some(packageEntry => - !packageEntry || typeof packageEntry !== 'object' || - typeof packageEntry.path !== 'string' - )) { - return true; - } - } - return false; -} - -function validateConfigurationResult(packageName, result) { - const lifecycle = result?.configs?.lifecycle; - const stringArrayFields = [ - 'allowedPatterns', - 'excessPolicies', - 'missingPolicies' - ]; - if (!result || typeof result !== 'object' || - typeof result.somePoliciesAreMissing !== 'boolean' || - !(result.canonicalNamesByPath instanceof Map) || - !lifecycle || typeof lifecycle !== 'object' || - !lifecycle.allowConfig || typeof lifecycle.allowConfig !== 'object' || - Array.isArray(lifecycle.allowConfig) || - !(lifecycle.packagesWithScripts instanceof Map) || - hasInvalidPackageEntries(lifecycle.packagesWithScripts) || - stringArrayFields.some(field => - !Array.isArray(lifecycle[field]) || - lifecycle[field].some(value => typeof value !== 'string') - ) || - Array.from(result.canonicalNamesByPath.keys()).some( - dependencyPath => typeof dependencyPath !== 'string' - )) { - throw new Error( - `${packageName} received an unsupported ` + - 'loadAllPackageConfigurations result shape.' - ); - } - return { - canonicalNamesByPath: result.canonicalNamesByPath, - lifecycle, - somePoliciesAreMissing: result.somePoliciesAreMissing - }; -} - -function writeArtifact(planDirectory, artifact) { - const realPlanDirectory = fs.realpathSync(planDirectory); - const artifactPath = path.join( - realPlanDirectory, - artifactNameForPackage(artifact.packageName) - ); - const temporaryPath = path.join( - realPlanDirectory, - `.${artifactNameForPackage(artifact.packageName)}.` + - `${process.pid}.${crypto.randomBytes(16).toString('hex')}.tmp` - ); - try { - fs.writeFileSync(temporaryPath, `${JSON.stringify(artifact)}\n`, { - encoding: 'utf8', - flag: 'wx', - mode: 0o600 - }); - fs.linkSync(temporaryPath, artifactPath); - } catch (error) { - fs.rmSync(temporaryPath, { force: true }); - if (error.code === 'EEXIST') { - const duplicateError = new Error( - `${artifact.packageName} already has a lifecycle plan artifact.` - ); - duplicateError.code = error.code; - throw duplicateError; - } - throw error; - } - fs.unlinkSync(temporaryPath); -} - -async function buildArtifact( - packageDirArgument, - configurationLoader = loadAllPackageConfigurations -) { - const packageDir = fs.realpathSync(packageDirArgument); - const packageJson = readPackageJson(packageDir); - const packageName = packageJson.name; - validatePackageIdentity(packageName, packageDir); - validatePolicyDecisions(packageName, packageJson); - - const scripts = packageJson.scripts || {}; - const implicitTopLevelEvents = IMPLICIT_TOP_LEVEL_EVENTS.filter( - event => typeof scripts[event] === 'string' && scripts[event].trim() !== '' - ); - - if (implicitTopLevelEvents.length > 0) { - throw new Error( - `${packageName} defines top-level lifecycle hooks that ` + - 'allow-scripts run would execute outside lavamoat.allowScripts: ' + - implicitTopLevelEvents.join(', ') - ); - } - - if (fs.existsSync(path.join(packageDir, 'binding.gyp'))) { - throw new Error( - `${packageName} contains binding.gyp, which would cause ` + - 'allow-scripts run to synthesize an unconfigured install hook.' - ); - } - - let configurationResult; - try { - configurationResult = await configurationLoader({ rootDir: packageDir }); - } catch (error) { - throw new Error( - `${packageName} could not load its lifecycle configuration: ` + - error.message - ); - } - const { - canonicalNamesByPath, - lifecycle, - somePoliciesAreMissing - } = validateConfigurationResult(packageName, configurationResult); - - const inactiveApprovedPatterns = lifecycle.excessPolicies.filter( - pattern => lifecycle.allowConfig[pattern] === true - ); - const inactiveDeniedPatterns = lifecycle.excessPolicies.filter( - pattern => lifecycle.allowConfig[pattern] === false - ); - if ( - somePoliciesAreMissing || - lifecycle.missingPolicies.length > 0 || - inactiveApprovedPatterns.length > 0 - ) { - throw new Error( - `${packageName}'s lifecycle policy changed after validation.` - ); - } - - if (inactiveDeniedPatterns.length > 0) { - console.warn( - `WARN: ${packageName} has inactive denied lifecycle policies that ` + - 'are not installed on this platform.' - ); - } - - const approvedPaths = new Set(); - const dependencyTreePaths = new Set( - Array.from(canonicalNamesByPath.keys(), dependencyPath => - fs.realpathSync(dependencyPath) - ) - ); - for (const pattern of lifecycle.allowedPatterns) { - const matchingPackages = lifecycle.packagesWithScripts.get(pattern); - if (!matchingPackages || matchingPackages.length === 0) { - throw new Error( - `${packageName} allows ${pattern}, but no installed package matches it.` - ); - } - - for (const packageWithScripts of matchingPackages) { - if (!packageWithScripts || typeof packageWithScripts.path !== 'string') { - throw new Error( - `${packageName} received an unsupported ` + - 'loadAllPackageConfigurations package entry.' - ); - } - const approvedPath = fs.realpathSync(packageWithScripts.path); - if (approvedPath.includes('\n')) { - throw new Error( - `${packageName} has an approved dependency path containing a newline.` - ); - } - if (approvedPaths.has(approvedPath)) { - throw new Error( - `${packageName} resolves multiple approvals to ${approvedPath}.` - ); - } - if (!dependencyTreePaths.has(approvedPath)) { - throw new Error( - `${packageName} resolved an approved dependency outside its ` + - `expected dependency tree: ${approvedPath}.` - ); - } - approvedPaths.add(approvedPath); - } - } - - return { - schemaVersion: ARTIFACT_SCHEMA_VERSION, - status: 'validated', - packageName, - packageDir, - approvedPaths: Array.from(approvedPaths) - }; -} - -async function main() { - const packageDirArgument = process.argv[2]; - if (!packageDirArgument) { - throw new Error('A package directory is required.'); - } - - const artifact = await buildArtifact(packageDirArgument); - const planDirectory = process.env[PLAN_DIRECTORY_ENV]; - if (planDirectory) { - writeArtifact(planDirectory, artifact); - console.log(`PASS: ${artifact.packageName}`); - return; - } - -} - -if (require.main === module) { - main().catch(error => { - console.error(`ERROR: ${error.message}`); - process.exitCode = 1; - }); -} - -module.exports = { - buildArtifact, - validateConfigurationResult, - writeArtifact -}; diff --git a/run-allowed-scripts.js b/run-allowed-scripts.js deleted file mode 100644 index 2f715b29ca9..00000000000 --- a/run-allowed-scripts.js +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -/* eslint-disable @typescript-eslint/no-require-imports */ - -// Run allow-scripts in a dedicated process group so interruption can terminate -// the active lifecycle command and all of its descendants. Lerna owns package -// selection, cwd, ordering, concurrency, output, and fail-fast orchestration. - -const { spawn } = require('node:child_process'); -const path = require('node:path'); - -const SIGNAL_STATUS = { - SIGHUP: 129, - SIGINT: 130, - SIGTERM: 143 -}; -const FORCE_KILL_DELAY_MS = 1000; - -function processGroupExists(processGroupId) { - try { - process.kill(-processGroupId, 0); - return true; - } catch (error) { - if (error.code === 'ESRCH') { - return false; - } - throw error; - } -} - -function signalProcessGroup(child, signal) { - if (process.platform === 'win32') { - child.kill(signal); - return; - } - try { - process.kill(-child.pid, signal); - } catch (error) { - if (error.code !== 'ESRCH') { - throw error; - } - } -} - -async function waitForProcessGroupExit(processGroupId, timeoutMs) { - if (process.platform === 'win32') { - return true; - } - const deadline = timeoutMs === undefined ? undefined : Date.now() + timeoutMs; - while (processGroupExists(processGroupId)) { - if (deadline !== undefined && Date.now() >= deadline) { - return false; - } - await new Promise(resolve => setTimeout(resolve, 20)); - } - return true; -} - -async function terminateRemainingProcessGroup(processGroupId, signalAlreadySent) { - if (process.platform === 'win32' || !processGroupExists(processGroupId)) { - return; - } - if (!signalAlreadySent) { - try { - process.kill(-processGroupId, 'SIGTERM'); - } catch (error) { - if (error.code !== 'ESRCH') { - throw error; - } - } - } - if (!await waitForProcessGroupExit( - processGroupId, - FORCE_KILL_DELAY_MS - )) { - try { - process.kill(-processGroupId, 'SIGKILL'); - } catch (error) { - if (error.code !== 'ESRCH') { - throw error; - } - } - await waitForProcessGroupExit(processGroupId); - } -} - -async function runAllowedScripts({ - allowScriptsPath, - cwd = process.cwd(), - env = process.env -}) { - const child = spawn(allowScriptsPath, ['run'], { - cwd, - detached: process.platform !== 'win32', - env, - stdio: 'inherit' - }); - let requestedSignal; - let forceKillTimer; - const signalHandlers = new Map(); - for (const signal of Object.keys(SIGNAL_STATUS)) { - const handler = () => { - if (requestedSignal) { - return; - } - requestedSignal = signal; - signalProcessGroup(child, signal); - forceKillTimer = setTimeout(() => { - signalProcessGroup(child, 'SIGKILL'); - }, FORCE_KILL_DELAY_MS); - }; - signalHandlers.set(signal, handler); - process.on(signal, handler); - } - - const result = await new Promise((resolve, reject) => { - child.once('error', reject); - child.once('close', (code, signal) => resolve({ code, signal })); - }); - if (forceKillTimer) { - clearTimeout(forceKillTimer); - } - await terminateRemainingProcessGroup(child.pid, Boolean(requestedSignal)); - for (const [signal, handler] of signalHandlers) { - process.off(signal, handler); - } - - if (requestedSignal) { - return SIGNAL_STATUS[requestedSignal]; - } - if (result.signal) { - return SIGNAL_STATUS[result.signal] || 1; - } - return result.code ?? 1; -} - -async function main() { - const rootPath = process.env.LERNA_ROOT_PATH; - if (!rootPath) { - throw new Error('LERNA_ROOT_PATH is required.'); - } - const status = await runAllowedScripts({ - allowScriptsPath: path.join( - rootPath, - 'node_modules', - '.bin', - 'allow-scripts' - ) - }); - process.exitCode = status; -} - -if (require.main === module) { - main().catch(error => { - console.error(`ERROR: ${error.message}`); - process.exitCode = 1; - }); -} - -module.exports = { - runAllowedScripts, - signalProcessGroup, - terminateRemainingProcessGroup, - waitForProcessGroupExit -}; diff --git a/test/lerna-exec-contract.test.js b/test/lerna-exec-contract.test.js deleted file mode 100644 index 84af9be5d6f..00000000000 --- a/test/lerna-exec-contract.test.js +++ /dev/null @@ -1,407 +0,0 @@ -'use strict'; - -/* eslint-disable @typescript-eslint/no-require-imports */ - -const assert = require('node:assert/strict'); -const fs = require('node:fs'); -const os = require('node:os'); -const path = require('node:path'); -const { spawn, spawnSync } = require('node:child_process'); -const { afterEach, test } = require('node:test'); -const { exactScopePattern } = require('../lifecycle-plan-coordinator'); - -const REPOSITORY_ROOT = path.resolve(__dirname, '..'); -const LERNA_CLI = path.join(REPOSITORY_ROOT, 'node_modules', 'lerna', 'cli.js'); -const temporaryDirectories = new Set(); -const descendantProcesses = new Set(); -const lernaProcesses = new Set(); - -afterEach(() => { - for (const pid of lernaProcesses) { - try { - process.kill(pid, 'SIGKILL'); - } catch (error) { - if (error.code !== 'ESRCH') { - throw error; - } - } - } - lernaProcesses.clear(); - - for (const pid of descendantProcesses) { - try { - process.kill(pid, 'SIGKILL'); - } catch (error) { - if (error.code !== 'ESRCH') { - throw error; - } - } - } - descendantProcesses.clear(); - - for (const temporaryDirectory of temporaryDirectories) { - fs.rmSync(temporaryDirectory, { force: true, recursive: true }); - } - temporaryDirectories.clear(); -}); - -function writeExecutable(filePath, contents) { - fs.writeFileSync(filePath, contents, { mode: 0o755 }); - fs.chmodSync(filePath, 0o755); -} - -function createFixture(includeSimilarName = false) { - const rootDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-lerna-contract-') - ); - temporaryDirectories.add(rootDir); - - fs.writeFileSync( - path.join(rootDir, 'package.json'), - `${JSON.stringify({ name: 'lerna-contract-fixture', private: true })}\n` - ); - fs.writeFileSync( - path.join(rootDir, 'lerna.json'), - `${JSON.stringify({ - version: '1.0.0', - packages: ['packages/[^insight]*'] - }, null, 2)}\n` - ); - - const packageDefinitions = [ - ['package-a', '@contract/package-a', false], - ['package-b', '@contract/package-b', true], - ['insight', '@contract/insight', false] - ]; - if (includeSimilarName) { - packageDefinitions.push(['package-ab', '@contract/package-ab', false]); - } - for (const [directory, name, isPrivate] of packageDefinitions) { - const packageDir = path.join(rootDir, 'packages', directory); - fs.mkdirSync(packageDir, { recursive: true }); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ name, private: isPrivate, version: '1.0.0' })}\n` - ); - } - - writeExecutable( - path.join(rootDir, 'contract-probe.js'), - `#!/usr/bin/env node -'use strict'; - -const crypto = require('node:crypto'); -const fs = require('node:fs'); - -const action = process.env.BITCORE_CONTRACT_ACTION; -const packageName = process.env.LERNA_PACKAGE_NAME; - -if (action === 'artifact') { - const artifactName = crypto.createHash('sha256') - .update(packageName) - .digest('hex') + '.json'; - const artifact = { - packageName, - cwd: process.cwd(), - rootPath: process.env.LERNA_ROOT_PATH - }; - fs.writeFileSync( - process.env.BITCORE_CONTRACT_ARTIFACT_DIR + '/' + artifactName, - JSON.stringify(artifact) + '\\n', - { flag: 'wx' } - ); -} else if (action === 'record') { - fs.appendFileSync( - process.env.BITCORE_CONTRACT_LOG, - packageName + '\\n' - ); - if (packageName === process.env.BITCORE_CONTRACT_FAIL_PACKAGE) { - process.exit(Number(process.env.BITCORE_CONTRACT_FAIL_STATUS)); - } -} else if (action === 'signal') { - const { spawn } = require('node:child_process'); - for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { - process.on(signal, () => { - fs.appendFileSync( - process.env.BITCORE_CONTRACT_SIGNAL_LOG, - 'command:' + signal + '\\n' - ); - process.exit(0); - }); - } - const descendant = spawn( - process.execPath, - [process.env.BITCORE_CONTRACT_DESCENDANT_PROBE], - { - env: process.env, - stdio: 'ignore' - } - ); - fs.writeFileSync( - process.env.BITCORE_CONTRACT_READY, - JSON.stringify({ commandPid: process.pid, descendantPid: descendant.pid }) - ); - setInterval(() => {}, 1000); -} else { - throw new Error('Unknown contract probe action: ' + action); -} -` - ); - - writeExecutable( - path.join(rootDir, 'descendant-probe.js'), - `#!/usr/bin/env node -'use strict'; - -const fs = require('node:fs'); -for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { - process.on(signal, () => { - fs.appendFileSync( - process.env.BITCORE_CONTRACT_SIGNAL_LOG, - 'descendant:' + signal + '\\n' - ); - process.exit(0); - }); -} -fs.writeFileSync(process.env.BITCORE_CONTRACT_DESCENDANT_READY, 'ready\\n'); -setInterval(() => {}, 1000); -` - ); - - return { rootDir }; -} - -function lernaArgs(...args) { - return [LERNA_CLI, 'exec', '--concurrency', '1', ...args, '--', - '$LERNA_ROOT_PATH/contract-probe.js']; -} - -function runLerna(fixture, args, env) { - return spawnSync(process.execPath, lernaArgs(...args), { - cwd: fixture.rootDir, - encoding: 'utf8', - env: { ...process.env, ...env } - }); -} - -function readLines(filePath) { - if (!fs.existsSync(filePath)) { - return []; - } - return fs.readFileSync(filePath, 'utf8').trim().split('\n'); -} - -async function waitForFile(filePath) { - const deadline = Date.now() + 5000; - while (!fs.existsSync(filePath)) { - if (Date.now() >= deadline) { - throw new Error(`Timed out waiting for ${filePath}`); - } - await new Promise(resolve => setTimeout(resolve, 20)); - } -} - -async function waitForClose(child) { - return new Promise((resolve, reject) => { - child.once('error', reject); - child.once('close', (code, signal) => resolve({ code, signal })); - }); -} - -test('installed Lerna sets package cwd and environment and excludes insight', () => { - const fixture = createFixture(); - const artifactDir = path.join(fixture.rootDir, 'artifacts'); - fs.mkdirSync(artifactDir); - - const result = runLerna(fixture, ['--stream'], { - BITCORE_CONTRACT_ACTION: 'artifact', - BITCORE_CONTRACT_ARTIFACT_DIR: artifactDir - }); - - assert.equal(result.status, 0, result.stderr); - const artifacts = fs.readdirSync(artifactDir) - .map(file => JSON.parse(fs.readFileSync(path.join(artifactDir, file)))); - artifacts.sort((left, right) => left.packageName.localeCompare(right.packageName)); - - assert.deepEqual( - artifacts.map(artifact => artifact.packageName), - ['@contract/package-a', '@contract/package-b'] - ); - const realRootDir = fs.realpathSync(fixture.rootDir); - for (const artifact of artifacts) { - assert.equal(artifact.rootPath, realRootDir); - assert.equal( - artifact.cwd, - path.join(realRootDir, 'packages', path.basename(artifact.packageName)) - ); - } - assert.ok( - fs.readdirSync(artifactDir).every(file => /^[a-f0-9]{64}\.json$/.test(file)), - 'artifact filenames must not contain unchecked package-name characters' - ); -}); - -test('installed Lerna JSON discovery provides names and absolute locations', () => { - const result = spawnSync( - process.execPath, - [LERNA_CLI, 'list', '--all', '--json', '--loglevel', 'silent'], - { cwd: REPOSITORY_ROOT, encoding: 'utf8' } - ); - - assert.equal(result.status, 0, result.stderr); - const packages = JSON.parse(result.stdout); - assert.equal(packages.length, 18); - assert.ok(packages.every(packageEntry => - typeof packageEntry.name === 'string' && packageEntry.name.length > 0 && - typeof packageEntry.location === 'string' && - path.isAbsolute(packageEntry.location) - )); - assert.ok(packages.every(packageEntry => - packageEntry.location !== path.join(REPOSITORY_ROOT, 'packages', 'insight') - )); -}); - -test('repeated escaped exact scopes select only their union including private', () => { - const fixture = createFixture(true); - const logPath = path.join(fixture.rootDir, 'execution.log'); - const selectedNames = ['@contract/package-a', '@contract/package-b']; - const scopeArgs = selectedNames.flatMap(packageName => [ - '--scope', - exactScopePattern(packageName) - ]); - - const result = runLerna(fixture, scopeArgs, { - BITCORE_CONTRACT_ACTION: 'record', - BITCORE_CONTRACT_LOG: logPath - }); - - assert.equal(result.status, 0, result.stderr); - assert.deepEqual(readLines(logPath), selectedNames); -}); - -test('escaped exact scope does not broaden a valid package name', () => { - const fixture = createFixture(true); - const logPath = path.join(fixture.rootDir, 'execution.log'); - const packageName = '@contract/package-a'; - - const result = runLerna(fixture, [ - '--scope', - exactScopePattern(packageName) - ], { - BITCORE_CONTRACT_ACTION: 'record', - BITCORE_CONTRACT_LOG: logPath - }); - - assert.equal(result.status, 0, result.stderr); - assert.deepEqual(readLines(logPath), [packageName]); -}); - -test('--no-bail runs every child and returns the highest child status', () => { - const fixture = createFixture(); - const logPath = path.join(fixture.rootDir, 'execution.log'); - - const result = runLerna(fixture, ['--no-bail'], { - BITCORE_CONTRACT_ACTION: 'record', - BITCORE_CONTRACT_LOG: logPath, - BITCORE_CONTRACT_FAIL_PACKAGE: '@contract/package-a', - BITCORE_CONTRACT_FAIL_STATUS: '17' - }); - - assert.equal(result.status, 17, result.stderr); - assert.deepEqual(readLines(logPath), [ - '@contract/package-a', - '@contract/package-b' - ]); -}); - -test('default bail stops after the first failure and preserves its status', () => { - const fixture = createFixture(); - const logPath = path.join(fixture.rootDir, 'execution.log'); - - const result = runLerna(fixture, [], { - BITCORE_CONTRACT_ACTION: 'record', - BITCORE_CONTRACT_LOG: logPath, - BITCORE_CONTRACT_FAIL_PACKAGE: '@contract/package-a', - BITCORE_CONTRACT_FAIL_STATUS: '23' - }); - - assert.equal(result.status, 23, result.stderr); - assert.deepEqual(readLines(logPath), ['@contract/package-a']); -}); - -test('empty scope selection does not execute any packages', () => { - const fixture = createFixture(); - const logPath = path.join(fixture.rootDir, 'execution.log'); - - // No --scope arguments at all — the exec command has no selectors. - // This should not run in any package. The contract is that the - // coordinator never calls Lerna with an empty scope; this test - // proves Lerna's default behavior does not accidentally expand to all. - const result = spawnSync( - process.execPath, - [LERNA_CLI, 'exec', '--concurrency', '1', '--', - '$LERNA_ROOT_PATH/contract-probe.js'], - { - cwd: fixture.rootDir, - encoding: 'utf8', - env: { - ...process.env, - BITCORE_CONTRACT_ACTION: 'record', - BITCORE_CONTRACT_LOG: logPath - } - } - ); - - // Lerna with no --scope runs in all managed packages, which is why - // the coordinator must never call Lerna exec without scope arguments. - // This test documents that behavior so the empty-set guard in - // buildExecutionArgs is justified. - assert.equal(result.status, 0, result.stderr); - const executed = readLines(logPath); - assert.ok( - executed.length > 0, - 'Lerna exec without --scope arguments runs in managed packages; ' + - 'the coordinator must guard against this by returning null for empty sets' - ); - assert.ok( - !executed.includes('@contract/insight'), - 'Insight must still be excluded even in unscoped execution' - ); -}); - -for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { - test(`Lerna ${signal} cleanup terminates its command but not its descendant`, async () => { - const fixture = createFixture(); - const readyPath = path.join(fixture.rootDir, 'command-ready.json'); - const descendantReadyPath = path.join(fixture.rootDir, 'descendant-ready'); - const signalLogPath = path.join(fixture.rootDir, 'signals.log'); - const child = spawn(process.execPath, lernaArgs(), { - cwd: fixture.rootDir, - env: { - ...process.env, - BITCORE_CONTRACT_ACTION: 'signal', - BITCORE_CONTRACT_READY: readyPath, - BITCORE_CONTRACT_DESCENDANT_PROBE: - path.join(fixture.rootDir, 'descendant-probe.js'), - BITCORE_CONTRACT_DESCENDANT_READY: descendantReadyPath, - BITCORE_CONTRACT_SIGNAL_LOG: signalLogPath - }, - stdio: 'ignore' - }); - lernaProcesses.add(child.pid); - - await waitForFile(readyPath); - await waitForFile(descendantReadyPath); - const { descendantPid } = JSON.parse(fs.readFileSync(readyPath, 'utf8')); - descendantProcesses.add(descendantPid); - - child.kill(signal); - const result = await waitForClose(child); - lernaProcesses.delete(child.pid); - await new Promise(resolve => setTimeout(resolve, 100)); - - assert.deepEqual(result, { code: null, signal }); - assert.deepEqual(readLines(signalLogPath), ['command:SIGTERM']); - assert.doesNotThrow(() => process.kill(descendantPid, 0)); - }); -} diff --git a/test/validate-and-run-allowed-scripts.test.js b/test/validate-and-run-allowed-scripts.test.js deleted file mode 100644 index d331365925e..00000000000 --- a/test/validate-and-run-allowed-scripts.test.js +++ /dev/null @@ -1,1668 +0,0 @@ -'use strict'; - -/* eslint-disable @typescript-eslint/no-require-imports */ - -const assert = require('node:assert/strict'); -const crypto = require('node:crypto'); -const fs = require('node:fs'); -const os = require('node:os'); -const path = require('node:path'); -const { spawn, spawnSync } = require('node:child_process'); -const { afterEach, test } = require('node:test'); -const { - loadAllPackageConfigurations -} = require('@lavamoat/allow-scripts'); -const { - artifactNameForPackage, - buildExecutionArgs, - buildGlobalPlan, - exactScopePattern, - parseDiscoveryOutput, - validateArtifactSet, - validateGlobalPlan -} = require('../lifecycle-plan-coordinator'); -const { - buildArtifact, - validateConfigurationResult, - writeArtifact -} = require('../plan-allowed-scripts'); - -const REPOSITORY_ROOT = path.resolve(__dirname, '..'); -const LERNA_CLI = path.join(REPOSITORY_ROOT, 'node_modules', 'lerna', 'cli.js'); -const temporaryDirectories = new Set(); -const fixtureProcesses = new Set(); - -afterEach(() => { - for (const pid of fixtureProcesses) { - try { - process.kill(pid, 'SIGKILL'); - } catch (error) { - if (error.code !== 'ESRCH') { - throw error; - } - } - } - fixtureProcesses.clear(); - for (const temporaryDirectory of temporaryDirectories) { - fs.rmSync(temporaryDirectory, { force: true, recursive: true }); - } - temporaryDirectories.clear(); -}); - -function writeExecutable(filePath, contents) { - fs.writeFileSync(filePath, contents, { mode: 0o755 }); - fs.chmodSync(filePath, 0o755); -} - -function createFixture(packageDefinitions) { - const rootDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-allowed-scripts-test-') - ); - temporaryDirectories.add(rootDir); - - const binDir = path.join(rootDir, 'node_modules', '.bin'); - const packagesDir = path.join(rootDir, 'packages'); - const runnerPath = path.join(rootDir, 'validate-and-run-allowed-scripts.sh'); - const plannerPath = path.join(rootDir, 'plan-allowed-scripts.js'); - const coordinatorPath = path.join(rootDir, 'lifecycle-plan-coordinator.js'); - const executionWrapperPath = path.join(rootDir, 'run-allowed-scripts.js'); - const logPath = path.join(rootDir, 'allow-scripts.log'); - const lernaLogPath = path.join(rootDir, 'lerna.log'); - const readyPath = path.join(rootDir, 'lerna-ready'); - const lifecycleReadyPath = path.join(rootDir, 'lifecycle-ready.json'); - const descendantReadyPath = path.join(rootDir, 'descendant-ready'); - const signalLogPath = path.join(rootDir, 'signals.log'); - - fs.mkdirSync(binDir, { recursive: true }); - fs.mkdirSync(packagesDir, { recursive: true }); - fs.writeFileSync( - path.join(rootDir, 'package.json'), - `${JSON.stringify({ name: 'allowed-scripts-fixture', private: true })}\n` - ); - fs.writeFileSync( - path.join(rootDir, 'lerna.json'), - `${JSON.stringify({ - version: '1.0.0', - packages: ['packages/[^insight]*'] - }, null, 2)}\n` - ); - fs.copyFileSync( - path.join(REPOSITORY_ROOT, 'validate-and-run-allowed-scripts.sh'), - runnerPath - ); - fs.chmodSync(runnerPath, 0o755); - fs.copyFileSync( - path.join(REPOSITORY_ROOT, 'lifecycle-plan-coordinator.js'), - coordinatorPath - ); - fs.copyFileSync( - path.join(REPOSITORY_ROOT, 'run-allowed-scripts.js'), - executionWrapperPath - ); - - for (const packageDefinition of packageDefinitions) { - const packageDir = path.join(packagesDir, packageDefinition.directory); - fs.mkdirSync(packageDir, { recursive: true }); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - version: '1.0.0', - ...packageDefinition.packageJson - }, null, 2)}\n` - ); - } - - writeExecutable( - path.join(binDir, 'lerna'), - `#!/bin/sh -if [ -n "\${BITCORE_TEST_LERNA_LOG:-}" ]; then - printf '%s\n' "$*" >> "$BITCORE_TEST_LERNA_LOG" -fi -if [ -n "\${BITCORE_TEST_READY_FILE:-}" ]; then - : > "$BITCORE_TEST_READY_FILE" -fi -if [ -n "\${BITCORE_TEST_LERNA_DELAY:-}" ]; then - sleep "$BITCORE_TEST_LERNA_DELAY" -fi -exec node "$BITCORE_TEST_REAL_LERNA" "$@" -` - ); - - writeExecutable( - path.join(binDir, 'allow-scripts'), - `#!/bin/sh -command_name=$1 -package_name=$(basename "$PWD") -printf '%s\\t%s\\n' "$command_name" "$package_name" >> "$BITCORE_TEST_LOG" -if [ "$#" -gt 1 ]; then - printf '%s\\t%s\\targs:%s\\n' "$command_name" "$package_name" "$*" >> "$BITCORE_TEST_LOG" -fi - -if [ "$command_name" = "check" ] && [ "\${BITCORE_TEST_FAIL_CHECK:-}" = "$package_name" ]; then - exit 1 -fi - -if [ "$command_name" = "run" ] && [ "\${BITCORE_TEST_FAIL_RUN:-}" = "$package_name" ]; then - exit 23 -fi - -if [ "$command_name" = "run" ] && [ "\${BITCORE_TEST_SIGNAL_RUN:-}" = "$package_name" ]; then - exec node "$BITCORE_TEST_SIGNAL_PROBE" -fi - -if [ "$command_name" = "list" ]; then - echo "mock lifecycle inventory for $package_name" -fi -` - ); - - fs.writeFileSync( - path.join(rootDir, 'signal-probe.js'), - `'use strict'; -const fs = require('node:fs'); -const { spawn } = require('node:child_process'); -const descendant = spawn( - process.execPath, - [process.env.BITCORE_TEST_DESCENDANT_PROBE], - { env: process.env, stdio: 'ignore' } -); -for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { - process.on(signal, () => { - fs.appendFileSync(process.env.BITCORE_TEST_SIGNAL_LOG, 'parent:' + signal + '\\n'); - process.exit(0); - }); -} -fs.writeFileSync( - process.env.BITCORE_TEST_LIFECYCLE_READY, - JSON.stringify({ parentPid: process.pid, descendantPid: descendant.pid }) -); -setInterval(() => {}, 1000); -` - ); - fs.writeFileSync( - path.join(rootDir, 'descendant-probe.js'), - `'use strict'; -const fs = require('node:fs'); -for (const signal of ['SIGHUP', 'SIGINT', 'SIGTERM']) { - process.on(signal, () => { - fs.appendFileSync( - process.env.BITCORE_TEST_SIGNAL_LOG, - 'descendant:' + signal + '\\n' - ); - process.exit(0); - }); -} -fs.writeFileSync(process.env.BITCORE_TEST_DESCENDANT_READY, 'ready\\n'); -setInterval(() => {}, 1000); -` - ); - - fs.writeFileSync( - plannerPath, - `'use strict'; - -const crypto = require('node:crypto'); -const fs = require('node:fs'); -const path = require('node:path'); - -const packageDir = fs.realpathSync(process.argv[2]); -const packageJson = JSON.parse( - fs.readFileSync(path.join(packageDir, 'package.json'), 'utf8') -); -const packageName = packageJson.name; -const implicitEvents = ['install', 'postinstall', 'prepublish', 'prepare'] - .filter(event => { - const script = packageJson.scripts?.[event]; - return typeof script === 'string' && script.trim() !== ''; - }); - -if (implicitEvents.length > 0) { - console.error( - \`ERROR: implicit top-level lifecycle hooks: \${implicitEvents.join(', ')}\` - ); - process.exit(1); -} - -if (process.env.BITCORE_TEST_FAIL_PLAN === path.basename(packageDir)) { - console.error('ERROR: simulated policy validation failure'); - process.exit(1); -} - -const artifact = { - schemaVersion: 1, - status: 'validated', - packageName, - packageDir, - approvedPaths: (packageJson.testApprovedPaths || []).map( - approvedPath => fs.realpathSync(approvedPath) - ) -}; -const artifactName = crypto.createHash('sha256') - .update(packageName) - .digest('hex') + '.json'; -if (process.env.BITCORE_TEST_SKIP_ARTIFACT !== path.basename(packageDir)) { - fs.writeFileSync( - path.join(process.env.BITCORE_LIFECYCLE_PLAN_DIR, artifactName), - JSON.stringify( - process.env.BITCORE_TEST_MALFORMED_ARTIFACT === path.basename(packageDir) - ? {} - : artifact - ) + '\\n', - { flag: 'wx' } - ); -} -console.log('PASS: ' + packageName); -` - ); - - return { - env: { - ...process.env, - BITCORE_TEST_LOG: logPath, - BITCORE_TEST_LERNA_LOG: lernaLogPath, - BITCORE_TEST_SIGNAL_PROBE: path.join(rootDir, 'signal-probe.js'), - BITCORE_TEST_DESCENDANT_PROBE: path.join(rootDir, 'descendant-probe.js'), - BITCORE_TEST_LIFECYCLE_READY: lifecycleReadyPath, - BITCORE_TEST_DESCENDANT_READY: descendantReadyPath, - BITCORE_TEST_SIGNAL_LOG: signalLogPath, - BITCORE_TEST_REAL_LERNA: LERNA_CLI - }, - logPath, - lernaLogPath, - lifecycleReadyPath, - descendantReadyPath, - signalLogPath, - readyPath, - rootDir, - runnerPath - }; -} - -function runFixture(fixture, additionalEnv = {}, args = []) { - return spawnSync('/bin/sh', [fixture.runnerPath, ...args], { - cwd: fixture.rootDir, - encoding: 'utf8', - env: { ...fixture.env, ...additionalEnv } - }); -} - -function readLog(logPath) { - if (!fs.existsSync(logPath)) { - return []; - } - return fs.readFileSync(logPath, 'utf8').trim().split('\n'); -} - -async function waitForFile(filePath) { - const deadline = Date.now() + 5000; - while (!fs.existsSync(filePath)) { - if (Date.now() >= deadline) { - throw new Error(`Timed out waiting for ${filePath}`); - } - await new Promise(resolve => setTimeout(resolve, 20)); - } -} - -async function waitForProcessExit(pid) { - const deadline = Date.now() + 5000; - while (true) { - try { - process.kill(pid, 0); - } catch (error) { - if (error.code === 'ESRCH') { - return; - } - throw error; - } - if (Date.now() >= deadline) { - throw new Error(`Timed out waiting for process ${pid} to exit`); - } - await new Promise(resolve => setTimeout(resolve, 20)); - } -} - -function createArtifactCollectionFixture() { - const rootDir = fs.realpathSync(fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-artifact-collection-') - )); - temporaryDirectories.add(rootDir); - const packageDir = path.join(rootDir, 'packages', 'package-a'); - const planDir = path.join(rootDir, 'plans'); - fs.mkdirSync(packageDir, { recursive: true }); - fs.mkdirSync(planDir); - const packageEntry = { name: '@scope/package-a', location: packageDir }; - const inventory = { schemaVersion: 1, packages: [packageEntry] }; - const artifact = { - schemaVersion: 1, - status: 'validated', - packageName: packageEntry.name, - packageDir, - approvedPaths: [] - }; - const artifactPath = path.join( - planDir, - artifactNameForPackage(packageEntry.name) - ); - return { artifact, artifactPath, inventory, packageDir, planDir, rootDir }; -} - -function writeJson(filePath, value) { - fs.writeFileSync(filePath, `${JSON.stringify(value)}\n`); -} - -test('structured discovery normalizes a closed managed-package inventory', () => { - const fixture = createArtifactCollectionFixture(); - const secondPackageDir = path.join(fixture.rootDir, 'packages', 'package-b'); - fs.mkdirSync(secondPackageDir); - - const inventory = parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ - { name: '@scope/package-a', location: fixture.packageDir }, - { name: '@scope/package-b', location: secondPackageDir } - ])); - - assert.deepEqual(inventory, { - schemaVersion: 1, - packages: [ - { name: '@scope/package-a', location: fixture.packageDir }, - { name: '@scope/package-b', location: secondPackageDir } - ] - }); -}); - -test('structured discovery fails closed on malformed or incomplete output', () => { - const fixture = createArtifactCollectionFixture(); - assert.throws( - () => parseDiscoveryOutput(fixture.rootDir, 'not json'), - /not valid JSON/ - ); - assert.throws( - () => parseDiscoveryOutput(fixture.rootDir, '[]'), - /non-empty JSON array/ - ); - assert.throws( - () => parseDiscoveryOutput( - fixture.rootDir, - JSON.stringify([{ name: '@scope/package-a' }]) - ), - /non-empty name and location fields/ - ); -}); - -test('structured discovery rejects duplicate names and locations', () => { - const fixture = createArtifactCollectionFixture(); - const secondPackageDir = path.join(fixture.rootDir, 'packages', 'package-b'); - fs.mkdirSync(secondPackageDir); - assert.throws( - () => parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ - { name: '@scope/package-a', location: fixture.packageDir }, - { name: '@scope/package-a', location: secondPackageDir } - ])), - /duplicate package name/ - ); - assert.throws( - () => parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ - { name: '@scope/package-a', location: fixture.packageDir }, - { name: '@scope/package-b', location: fixture.packageDir } - ])), - /duplicate package location/ - ); -}); - -test('structured discovery rejects packages outside the repository and insight', () => { - const fixture = createArtifactCollectionFixture(); - const outsideDir = fs.mkdtempSync(path.join(os.tmpdir(), 'bitcore-outside-')); - temporaryDirectories.add(outsideDir); - assert.throws( - () => parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ - { name: '@scope/outside', location: outsideDir } - ])), - /outside the repository/ - ); - - const insightDir = path.join(fixture.rootDir, 'packages', 'insight'); - fs.mkdirSync(insightDir); - assert.throws( - () => parseDiscoveryOutput(fixture.rootDir, JSON.stringify([ - { name: '@scope/insight', location: insightDir } - ])), - /excluded packages\/insight/ - ); -}); - -test('artifact collection accepts exactly one matching artifact per package', () => { - const fixture = createArtifactCollectionFixture(); - writeJson(fixture.artifactPath, fixture.artifact); - assert.deepEqual( - validateArtifactSet(fixture.inventory, fixture.planDir), - [fixture.artifact] - ); -}); - -test('artifact collection rejects missing, unexpected, and duplicate artifacts', () => { - const fixture = createArtifactCollectionFixture(); - assert.throws( - () => validateArtifactSet(fixture.inventory, fixture.planDir), - /Missing lifecycle plan artifact/ - ); - - writeJson(path.join(fixture.planDir, 'unexpected.json'), { - ...fixture.artifact, - packageName: '@scope/unexpected' - }); - assert.throws( - () => validateArtifactSet(fixture.inventory, fixture.planDir), - /Unexpected lifecycle plan artifact/ - ); - - fs.rmSync(path.join(fixture.planDir, 'unexpected.json')); - writeJson(fixture.artifactPath, fixture.artifact); - writeJson(path.join(fixture.planDir, 'duplicate.json'), fixture.artifact); - assert.throws( - () => validateArtifactSet(fixture.inventory, fixture.planDir), - /Duplicate lifecycle plan artifacts/ - ); -}); - -test('artifact collection rejects schema, status, and identity mismatches', () => { - for (const [change, pattern] of [ - [{ schemaVersion: 2 }, /malformed/], - [{ status: 'failed' }, /malformed/], - [{ packageName: '@scope/wrong' }, /package-name mismatch/], - [{ packageDir: '/wrong/location' }, /package-location mismatch/] - ]) { - const fixture = createArtifactCollectionFixture(); - writeJson(fixture.artifactPath, { ...fixture.artifact, ...change }); - assert.throws( - () => validateArtifactSet(fixture.inventory, fixture.planDir), - pattern - ); - } -}); - -test('artifact collection rejects malformed JSON and duplicate approved paths', () => { - const malformedFixture = createArtifactCollectionFixture(); - fs.writeFileSync(malformedFixture.artifactPath, '{'); - assert.throws( - () => validateArtifactSet(malformedFixture.inventory, malformedFixture.planDir), - /is malformed/ - ); - - const duplicateFixture = createArtifactCollectionFixture(); - writeJson(duplicateFixture.artifactPath, { - ...duplicateFixture.artifact, - approvedPaths: [duplicateFixture.packageDir, duplicateFixture.packageDir] - }); - assert.throws( - () => validateArtifactSet(duplicateFixture.inventory, duplicateFixture.planDir), - /duplicate approved path/ - ); - - const nonCanonicalFixture = createArtifactCollectionFixture(); - writeJson(nonCanonicalFixture.artifactPath, { - ...nonCanonicalFixture.artifact, - approvedPaths: [ - `${nonCanonicalFixture.packageDir}/../` + - path.basename(nonCanonicalFixture.packageDir) - ] - }); - assert.throws( - () => validateArtifactSet( - nonCanonicalFixture.inventory, - nonCanonicalFixture.planDir - ), - /non-canonical path/ - ); -}); - -test('global planning groups identical sets and keeps disjoint sets separate', () => { - const fixture = createArtifactCollectionFixture(); - const sharedPath = path.join(fixture.rootDir, 'shared-dependency'); - const secondSharedPath = path.join(fixture.rootDir, 'second-shared-dependency'); - const disjointPath = path.join(fixture.rootDir, 'disjoint-dependency'); - const packages = ['package-a', 'package-b', 'package-c', 'package-empty'] - .map(name => ({ - name, - location: path.join(fixture.rootDir, 'packages', name) - })); - const inventory = { schemaVersion: 1, packages }; - const artifacts = [ - { - packageName: 'package-a', - packageDir: packages[0].location, - approvedPaths: [sharedPath, secondSharedPath] - }, - { - packageName: 'package-b', - packageDir: packages[1].location, - approvedPaths: [secondSharedPath, sharedPath] - }, - { - packageName: 'package-c', - packageDir: packages[2].location, - approvedPaths: [disjointPath] - }, - { - packageName: 'package-empty', - packageDir: packages[3].location, - approvedPaths: [] - } - ]; - - const globalPlan = buildGlobalPlan(inventory, artifacts); - assert.deepEqual( - globalPlan.selectedPackages.map(packageEntry => packageEntry.name), - ['package-a', 'package-c'] - ); - assert.equal(globalPlan.groups.length, 2); - assert.deepEqual(globalPlan.groups[0].packageNames, [ - 'package-a', - 'package-b' - ]); - assert.equal(globalPlan.groups[0].representative.name, 'package-a'); - assert.equal( - globalPlan.packages.find(packagePlan => packagePlan.name === 'package-empty') - .selected, - false - ); -}); - -test('global planning rejects partial overlaps before selection can execute', () => { - const fixture = createArtifactCollectionFixture(); - const packages = ['package-a', 'package-b'].map(name => ({ - name, - location: path.join(fixture.rootDir, 'packages', name) - })); - const inventory = { schemaVersion: 1, packages }; - assert.throws( - () => buildGlobalPlan(inventory, [ - { - packageName: 'package-a', - packageDir: packages[0].location, - approvedPaths: ['/dependency/one', '/dependency/shared'] - }, - { - packageName: 'package-b', - packageDir: packages[1].location, - approvedPaths: ['/dependency/shared', '/dependency/two'] - } - ]), - /package-b has a partial overlap with package-a/ - ); -}); - -test('global-plan acceptance rejects invalid selected-package state', () => { - assert.throws( - () => validateGlobalPlan( - [{ - name: 'package-empty', - location: '/packages/package-empty', - approvedPaths: [], - selected: true - }], - [], - [{ name: 'package-empty', location: '/packages/package-empty' }] - ), - /selected packages do not match|invalid selection/ - ); -}); - -test('execution scopes are separate exact argv values with empty-set safety', () => { - const packageNames = ['@scope/package-a', '@scope/package-[literal]']; - const args = buildExecutionArgs( - packageNames.map(name => ({ name, location: `/packages/${name}` })) - ); - assert.deepEqual(args, [ - 'exec', - '--concurrency', - '1', - '--stream', - '--scope', - exactScopePattern(packageNames[0]), - '--scope', - exactScopePattern(packageNames[1]), - '--', - 'node', - '"$BITCORE_LIFECYCLE_RUN_WRAPPER"' - ]); - assert.equal(buildExecutionArgs([]), null); -}); - -test('planner validates the installed allow-scripts configuration shape', async () => { - const fixture = createArtifactCollectionFixture(); - writeJson(path.join(fixture.packageDir, 'package.json'), { - name: '@scope/package-a' - }); - const result = await loadAllPackageConfigurations({ - rootDir: fixture.packageDir - }); - - const validated = validateConfigurationResult('@scope/package-a', result); - assert.equal(typeof validated.somePoliciesAreMissing, 'boolean'); - assert.ok(validated.canonicalNamesByPath instanceof Map); - assert.ok(validated.lifecycle.packagesWithScripts instanceof Map); - for (const field of [ - 'allowedPatterns', - 'excessPolicies', - 'missingPolicies' - ]) { - assert.ok(Array.isArray(validated.lifecycle[field])); - } -}); - -test('planner fails clearly when the allow-scripts result shape changes', () => { - for (const result of [ - null, - {}, - { configs: { lifecycle: {} }, somePoliciesAreMissing: false }, - { - canonicalNamesByPath: new Map(), - configs: { - lifecycle: { - allowConfig: {}, - allowedPatterns: [], - excessPolicies: [], - missingPolicies: [], - packagesWithScripts: [] - } - }, - somePoliciesAreMissing: false - } - ]) { - assert.throws( - () => validateConfigurationResult('@scope/package-a', result), - /unsupported loadAllPackageConfigurations result shape/ - ); - } -}); - -test('planner adds package identity to configuration loading failures', async () => { - const fixture = createArtifactCollectionFixture(); - writeJson(path.join(fixture.packageDir, 'package.json'), { - name: '@scope/package-a' - }); - await assert.rejects( - () => buildArtifact(fixture.packageDir, async () => { - throw new Error('simulated loader failure'); - }), - /@scope\/package-a could not load.*simulated loader failure/ - ); -}); - -test('planner rejects approved paths outside the expected dependency tree', async () => { - const fixture = createArtifactCollectionFixture(); - const outsideDir = fs.realpathSync(fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-approved-outside-') - )); - temporaryDirectories.add(outsideDir); - writeJson(path.join(fixture.packageDir, 'package.json'), { - name: '@scope/package-a', - lavamoat: { allowScripts: { 'unsafe#1.0.0': true } } - }); - - await assert.rejects( - () => buildArtifact(fixture.packageDir, async () => ({ - canonicalNamesByPath: new Map(), - configs: { - lifecycle: { - allowConfig: { 'unsafe#1.0.0': true }, - allowedPatterns: ['unsafe#1.0.0'], - excessPolicies: [], - missingPolicies: [], - packagesWithScripts: new Map([ - ['unsafe#1.0.0', [{ path: outsideDir }]] - ]) - } - }, - somePoliciesAreMissing: false - })), - /outside its expected dependency tree/ - ); -}); - -test('planner rejects duplicate physical paths within one package plan', async () => { - const fixture = createArtifactCollectionFixture(); - const dependencyDir = path.join(fixture.packageDir, 'node_modules', 'unsafe'); - fs.mkdirSync(dependencyDir, { recursive: true }); - writeJson(path.join(fixture.packageDir, 'package.json'), { - name: '@scope/package-a', - lavamoat: { - allowScripts: { - 'first#1.0.0': true, - 'second#1.0.0': true - } - } - }); - const packageEntry = { path: dependencyDir }; - - await assert.rejects( - () => buildArtifact(fixture.packageDir, async () => ({ - canonicalNamesByPath: new Map([[dependencyDir, 'unsafe']]), - configs: { - lifecycle: { - allowConfig: { - 'first#1.0.0': true, - 'second#1.0.0': true - }, - allowedPatterns: ['first#1.0.0', 'second#1.0.0'], - excessPolicies: [], - missingPolicies: [], - packagesWithScripts: new Map([ - ['first#1.0.0', [packageEntry]], - ['second#1.0.0', [packageEntry]] - ]) - } - }, - somePoliciesAreMissing: false - })), - /resolves multiple approvals/ - ); -}); - -test('planner publishes artifacts atomically and exclusively', () => { - const fixture = createArtifactCollectionFixture(); - writeArtifact(fixture.planDir, fixture.artifact); - assert.deepEqual( - JSON.parse(fs.readFileSync(fixture.artifactPath, 'utf8')), - fixture.artifact - ); - assert.deepEqual(fs.readdirSync(fixture.planDir), [ - path.basename(fixture.artifactPath) - ]); - assert.throws( - () => writeArtifact(fixture.planDir, fixture.artifact), - error => error.code === 'EEXIST' - ); - assert.deepEqual(fs.readdirSync(fixture.planDir), [ - path.basename(fixture.artifactPath) - ]); -}); - -test('production planner rejects implicit workspace lifecycle hooks', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - name: 'package-with-prepare', - scripts: { - prepare: 'echo unexpected' - } - }, null, 2)}\n` - ); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 1); - assert.match( - result.stderr, - /top-level lifecycle hooks.*outside lavamoat\.allowScripts: prepare/ - ); -}); - -test('production planner rejects an implicit node-gyp install hook', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ name: 'package-with-binding-gyp' }, null, 2)}\n` - ); - fs.writeFileSync(path.join(packageDir, 'binding.gyp'), '{}\n'); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 1); - assert.match(result.stderr, /binding\.gyp.*unconfigured install hook/); -}); - -test('production planner accepts an inactive denied policy', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - name: 'package-with-inactive-denial', - lavamoat: { - allowScripts: { - fsevents: false - } - } - }, null, 2)}\n` - ); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 0, result.stderr); - assert.equal(result.stdout, ''); - assert.match( - result.stderr, - /inactive denied lifecycle policies.*not installed on this platform/ - ); -}); - -test('production planner accepts an active versionless denial', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - const dependencyDir = path.join(packageDir, 'node_modules', 'unsafe'); - fs.mkdirSync(dependencyDir, { recursive: true }); - writeJson(path.join(packageDir, 'package.json'), { - name: 'package-with-active-denial', - dependencies: { unsafe: '1.0.0' }, - lavamoat: { allowScripts: { unsafe: false } } - }); - writeJson(path.join(dependencyDir, 'package.json'), { - name: 'unsafe', - version: '1.0.0', - scripts: { postinstall: 'echo denied' } - }); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 0, result.stderr); - assert.equal(result.stdout, ''); -}); - -test('production planner rejects an inactive approved policy', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - name: 'package-with-inactive-approval', - lavamoat: { - allowScripts: { - 'fsevents#1.2.11': true - } - } - }, null, 2)}\n` - ); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 1); - assert.match(result.stderr, /lifecycle policy changed after validation/); -}); - -test('production planner rejects non-boolean policy decisions', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - name: 'package-with-non-boolean-policy', - lavamoat: { - allowScripts: { - fsevents: 'false' - } - } - }, null, 2)}\n` - ); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 1); - assert.match(result.stderr, /decision for fsevents must be boolean/); -}); - -test('production planner rejects versionless approvals', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - name: 'package-with-versionless-approval', - lavamoat: { - allowScripts: { - unsafe: true - } - } - }, null, 2)}\n` - ); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 1); - assert.match(result.stderr, /approval for unsafe must include a version/); -}); - -test('production planner rejects a mismatched version approval', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - const dependencyDir = path.join(packageDir, 'node_modules', 'unsafe'); - fs.mkdirSync(dependencyDir, { recursive: true }); - writeJson(path.join(packageDir, 'package.json'), { - name: 'package-with-mismatched-approval', - dependencies: { unsafe: '1.0.0' }, - lavamoat: { allowScripts: { 'unsafe#2.0.0': true } } - }); - writeJson(path.join(dependencyDir, 'package.json'), { - name: 'unsafe', - version: '1.0.0', - scripts: { postinstall: 'echo unsafe' } - }); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 1); - assert.match(result.stderr, /lifecycle policy changed after validation/); -}); - -test('production planner rejects a mismatched Lerna package identity', () => { - const rootDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-root-') - ); - temporaryDirectories.add(rootDir); - const packageDir = path.join(rootDir, 'packages', 'package-a'); - const planDir = path.join(rootDir, 'plans'); - fs.mkdirSync(packageDir, { recursive: true }); - fs.mkdirSync(planDir); - writeJson(path.join(packageDir, 'package.json'), { - name: '@scope/package-a' - }); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), '.'], - { - cwd: packageDir, - encoding: 'utf8', - env: { - ...process.env, - BITCORE_LIFECYCLE_PLAN_DIR: planDir, - LERNA_PACKAGE_NAME: '@scope/wrong-package', - LERNA_ROOT_PATH: rootDir - } - } - ); - - assert.equal(result.status, 1); - assert.match(result.stderr, /Lerna package identity mismatch/); - assert.deepEqual(fs.readdirSync(planDir), []); -}); - -test('production planner rejects missing policy decisions', () => { - const packageDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-package-') - ); - temporaryDirectories.add(packageDir); - const dependencyDir = path.join(packageDir, 'node_modules', 'unsafe'); - fs.mkdirSync(dependencyDir, { recursive: true }); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - name: 'package-with-missing-policy', - dependencies: { - unsafe: '1.0.0' - } - }, null, 2)}\n` - ); - fs.writeFileSync( - path.join(dependencyDir, 'package.json'), - `${JSON.stringify({ - name: 'unsafe', - version: '1.0.0', - scripts: { - postinstall: 'echo unsafe' - } - }, null, 2)}\n` - ); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), packageDir], - { encoding: 'utf8' } - ); - - assert.equal(result.status, 1); - assert.match(result.stderr, /lifecycle policy changed after validation/); -}); - -test('production planner writes one safe structured artifact for an empty plan', () => { - const rootDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-root-') - ); - temporaryDirectories.add(rootDir); - const packageDir = path.join(rootDir, 'packages', 'package-a'); - const planDir = path.join(rootDir, 'plans'); - fs.mkdirSync(packageDir, { recursive: true }); - fs.mkdirSync(planDir); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - name: '@scope/package-a', - lavamoat: { - allowScripts: { - fsevents: false - } - } - }, null, 2)}\n` - ); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), '.'], - { - cwd: packageDir, - encoding: 'utf8', - env: { - ...process.env, - BITCORE_LIFECYCLE_PLAN_DIR: planDir, - LERNA_PACKAGE_NAME: '@scope/package-a', - LERNA_ROOT_PATH: rootDir - } - } - ); - - assert.equal(result.status, 0, result.stderr); - const artifactName = `${crypto.createHash('sha256') - .update('@scope/package-a') - .digest('hex')}.json`; - assert.deepEqual( - JSON.parse(fs.readFileSync(path.join(planDir, artifactName), 'utf8')), - { - schemaVersion: 1, - status: 'validated', - packageName: '@scope/package-a', - packageDir: fs.realpathSync(packageDir), - approvedPaths: [] - } - ); -}); - -test('production planner writes real approved dependency paths', () => { - const rootDir = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-planner-root-') - ); - temporaryDirectories.add(rootDir); - const packageDir = path.join(rootDir, 'packages', 'package-a'); - const dependencyDir = path.join(packageDir, 'node_modules', 'unsafe'); - const planDir = path.join(rootDir, 'plans'); - fs.mkdirSync(dependencyDir, { recursive: true }); - fs.mkdirSync(planDir); - fs.writeFileSync( - path.join(packageDir, 'package.json'), - `${JSON.stringify({ - name: '@scope/package-a', - dependencies: { - unsafe: '1.0.0' - }, - lavamoat: { - allowScripts: { - 'unsafe#1.0.0': true - } - } - }, null, 2)}\n` - ); - fs.writeFileSync( - path.join(dependencyDir, 'package.json'), - `${JSON.stringify({ - name: 'unsafe', - version: '1.0.0', - scripts: { - postinstall: 'echo approved' - } - }, null, 2)}\n` - ); - - const result = spawnSync( - process.execPath, - [path.join(REPOSITORY_ROOT, 'plan-allowed-scripts.js'), '.'], - { - cwd: packageDir, - encoding: 'utf8', - env: { - ...process.env, - BITCORE_LIFECYCLE_PLAN_DIR: planDir, - LERNA_PACKAGE_NAME: '@scope/package-a', - LERNA_ROOT_PATH: rootDir - } - } - ); - - assert.equal(result.status, 0, result.stderr); - const [artifactFile] = fs.readdirSync(planDir); - const artifact = JSON.parse( - fs.readFileSync(path.join(planDir, artifactFile), 'utf8') - ); - assert.deepEqual(artifact.approvedPaths, [fs.realpathSync(dependencyDir)]); -}); - -test('accepts inactive denied policies on the current platform', () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [] - } - } - ]); - - const result = runFixture(fixture, { - BITCORE_TEST_FAIL_CHECK: 'package-a' - }); - - assert.equal(result.status, 0, result.stderr); - assert.deepEqual(readLog(fixture.logPath), []); - assert.equal( - readLog(fixture.lernaLogPath).filter(line => - line.includes('run-allowed-scripts.js') - ).length, - 0 - ); - assert.match(result.stdout, /No approved dependency lifecycle scripts were required/); -}); - -test('does not execute when the authoritative planner rejects a package', () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - scripts: { - prepare: 'echo unsafe implicit execution' - }, - testApprovedPaths: [] - } - } - ]); - - const result = runFixture(fixture); - - assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), []); - assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); - assert.match(result.stdout, /policy validation or lifecycle planning failed/); - assert.match(result.stdout, /Approved lifecycle scripts were not executed/); -}); - -test('planner failures do not prevent later packages from being validated', () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - scripts: { - prepare: 'echo unsafe implicit execution' - }, - testApprovedPaths: [] - } - }, - { - directory: 'package-b', - packageJson: { - name: 'package-b', - testApprovedPaths: [] - } - } - ]); - - const result = runFixture(fixture); - - assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), []); - assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); - assert.match(result.stdout, /package-b: PASS: package-b/); - assert.match(result.stdout, /Approved lifecycle scripts were not executed/); -}); - -test('multiple validation failures prevent execution and all are reported', () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - scripts: { - prepare: 'echo unsafe implicit execution' - }, - testApprovedPaths: [] - } - }, - { - directory: 'package-b', - packageJson: { - name: 'package-b', - scripts: { - postinstall: 'echo also unsafe' - }, - testApprovedPaths: [] - } - }, - { - directory: 'package-c', - packageJson: { - name: 'package-c', - testApprovedPaths: [] - } - } - ]); - - const result = runFixture(fixture); - - assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), []); - assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); - assert.match(result.stderr, /implicit top-level lifecycle hooks: postinstall/); - assert.match(result.stdout, /package-c: PASS: package-c/); - assert.match(result.stdout, /policy validation or lifecycle planning failed/); - assert.match(result.stdout, /Approved lifecycle scripts were not executed/); -}); - -test('check-only mode validates the complete plan without execution', () => { - const approvedDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-approved-dependency-') - ); - temporaryDirectories.add(approvedDependency); - - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [approvedDependency] - } - } - ]); - - const result = runFixture(fixture, {}, ['--check-only']); - - assert.equal(result.status, 0, result.stderr); - assert.deepEqual(readLog(fixture.logPath), []); - assert.match(result.stdout, /execution plan passed validation/); - assert.match(result.stdout, /lifecycle scripts were not executed/); -}); - -test('does not execute when a package artifact is missing', () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [] - } - } - ]); - - const result = runFixture(fixture, { - BITCORE_TEST_SKIP_ARTIFACT: 'package-a' - }); - - assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), []); - assert.match(result.stderr, /Missing lifecycle plan artifact/); - assert.match(result.stdout, /global lifecycle execution plan is incomplete/); - assert.match(result.stdout, /Approved lifecycle scripts were not executed/); -}); - -test('does not execute when a package artifact is malformed', () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [] - } - } - ]); - - const result = runFixture(fixture, { - BITCORE_TEST_MALFORMED_ARTIFACT: 'package-a' - }); - - assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), []); - assert.match(result.stderr, /Lifecycle plan.*malformed/); - assert.match(result.stdout, /global lifecycle execution plan is incomplete/); - assert.match(result.stdout, /Approved lifecycle scripts were not executed/); -}); - -test('executes a shared physical approved path only once', () => { - const sharedDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-shared-dependency-') - ); - temporaryDirectories.add(sharedDependency); - - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [sharedDependency] - } - }, - { - directory: 'package-b', - packageJson: { - name: 'package-b', - testApprovedPaths: [sharedDependency] - } - } - ]); - - const result = runFixture(fixture); - - assert.equal(result.status, 0, result.stderr); - assert.deepEqual(readLog(fixture.logPath), [ - 'run\tpackage-a' - ]); - assert.match( - result.stdout, - /SKIP: package-b's approved dependency scripts are already planned\./ - ); - // 11.3 #18: verify allow-scripts run was invoked without --skip-versions - const logLines = readLog(fixture.logPath); - for (const line of logLines) { - assert.ok( - !line.includes('--skip-versions'), - 'allow-scripts run must not receive --skip-versions' - ); - } -}); - -test('allow-scripts run is invoked without --skip-versions or npx', () => { - const approvedDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-approved-dependency-') - ); - temporaryDirectories.add(approvedDependency); - - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [approvedDependency] - } - } - ]); - - const result = runFixture(fixture); - - assert.equal(result.status, 0, result.stderr); - const logLines = readLog(fixture.logPath); - assert.equal(logLines.length, 1); - assert.equal(logLines[0], 'run\tpackage-a', - 'allow-scripts run must have no extra arguments (no --skip-versions)'); - // 11.3 #17: the runner uses the root-pinned allow-scripts binary, not npx - assert.ok( - !result.stdout.includes('npx') && !result.stderr.includes('npx'), - 'production must not use npx' - ); -}); - -test('rejects partial approved-path overlaps before execution', () => { - const sharedDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-shared-dependency-') - ); - const uniqueDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-unique-dependency-') - ); - temporaryDirectories.add(sharedDependency); - temporaryDirectories.add(uniqueDependency); - - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [sharedDependency] - } - }, - { - directory: 'package-b', - packageJson: { - name: 'package-b', - testApprovedPaths: [sharedDependency, uniqueDependency] - } - } - ]); - - const result = runFixture(fixture); - - assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), []); - assert.match(result.stderr, /package-b has a partial overlap/); - assert.match(result.stdout, /Approved lifecycle scripts were not executed/); -}); - -test('rejects implicit workspace lifecycle hooks before execution', () => { - const approvedDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-approved-dependency-') - ); - temporaryDirectories.add(approvedDependency); - - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - scripts: { - prepare: 'echo unsafe implicit execution' - }, - testApprovedPaths: [approvedDependency] - } - } - ]); - - const result = runFixture(fixture); - - assert.equal(result.status, 1); - assert.deepEqual(readLog(fixture.logPath), []); - assert.match(result.stderr, /implicit top-level lifecycle hooks: prepare/); - assert.match(result.stdout, /Approved lifecycle scripts were not executed/); -}); - -test('preserves an approved lifecycle execution failure status', () => { - const approvedDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-approved-dependency-') - ); - temporaryDirectories.add(approvedDependency); - - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [approvedDependency] - } - } - ]); - - const result = runFixture(fixture, { - BITCORE_TEST_FAIL_RUN: 'package-a' - }); - - assert.equal(result.status, 23); - assert.deepEqual(readLog(fixture.logPath), ['run\tpackage-a']); - assert.match(result.stdout, /Exit status: 23/); -}); - -test('selected-package execution is serial and fail-fast', () => { - const firstDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-first-dependency-') - ); - const secondDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-second-dependency-') - ); - temporaryDirectories.add(firstDependency); - temporaryDirectories.add(secondDependency); - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [firstDependency] - } - }, - { - directory: 'package-b', - packageJson: { - name: 'package-b', - testApprovedPaths: [secondDependency] - } - } - ]); - - const result = runFixture(fixture, { - BITCORE_TEST_FAIL_RUN: 'package-a' - }); - - assert.equal(result.status, 23); - assert.deepEqual(readLog(fixture.logPath), ['run\tpackage-a']); -}); - -for (const [signal, expectedStatus] of [ - ['SIGHUP', 129], - ['SIGINT', 130], - ['SIGTERM', 143] -]) { - test(`${signal} terminates the active lifecycle process tree`, async () => { - const firstDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-first-dependency-') - ); - const secondDependency = fs.mkdtempSync( - path.join(os.tmpdir(), 'bitcore-second-dependency-') - ); - temporaryDirectories.add(firstDependency); - temporaryDirectories.add(secondDependency); - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [firstDependency] - } - }, - { - directory: 'package-b', - packageJson: { - name: 'package-b', - testApprovedPaths: [secondDependency] - } - } - ]); - const child = spawn('/bin/sh', [fixture.runnerPath], { - cwd: fixture.rootDir, - env: { - ...fixture.env, - BITCORE_TEST_SIGNAL_RUN: 'package-a' - }, - stdio: 'ignore' - }); - fixtureProcesses.add(child.pid); - - await waitForFile(fixture.lifecycleReadyPath); - await waitForFile(fixture.descendantReadyPath); - const { parentPid, descendantPid } = JSON.parse( - fs.readFileSync(fixture.lifecycleReadyPath, 'utf8') - ); - fixtureProcesses.add(parentPid); - fixtureProcesses.add(descendantPid); - - child.kill(signal); - const result = await new Promise((resolve, reject) => { - child.once('error', reject); - child.once('close', (code, closeSignal) => - resolve({ code, signal: closeSignal }) - ); - }); - fixtureProcesses.delete(child.pid); - await waitForProcessExit(parentPid); - await waitForProcessExit(descendantPid); - fixtureProcesses.delete(parentPid); - fixtureProcesses.delete(descendantPid); - - assert.deepEqual(result, { code: expectedStatus, signal: null }); - // 11.3 #7: shared dependency executes once - // 11.3 #15: no later package begins after interruption - assert.deepEqual(readLog(fixture.logPath), ['run\tpackage-a']); - assert.deepEqual(readLog(fixture.signalLogPath).sort(), [ - 'descendant:SIGTERM', - 'parent:SIGTERM' - ]); - }); -} - -test('terminates with the signal status instead of continuing', async () => { - const fixture = createFixture([ - { - directory: 'package-a', - packageJson: { - name: 'package-a', - testApprovedPaths: [] - } - } - ]); - const child = spawn('/bin/sh', [fixture.runnerPath], { - cwd: fixture.rootDir, - env: { - ...fixture.env, - BITCORE_TEST_LERNA_DELAY: '1', - BITCORE_TEST_READY_FILE: fixture.readyPath - } - }); - let stdout = ''; - child.stdout.on('data', chunk => { - stdout += chunk; - }); - - await waitForFile(fixture.readyPath); - child.kill('SIGTERM'); - - const result = await new Promise((resolve, reject) => { - child.once('error', reject); - child.once('close', (code, signal) => resolve({ code, signal })); - }); - - assert.deepEqual(result, { code: 143, signal: null }); - assert.doesNotMatch( - stdout, - /Approved dependency lifecycle scripts completed successfully/ - ); -}); diff --git a/test/validate-lifecycle-policy.test.js b/test/validate-lifecycle-policy.test.js new file mode 100644 index 00000000000..96c70b7c47e --- /dev/null +++ b/test/validate-lifecycle-policy.test.js @@ -0,0 +1,136 @@ +'use strict'; + +/* eslint-disable @typescript-eslint/no-require-imports */ + +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const test = require('node:test'); +const { + FORBIDDEN_WORKSPACE_HOOKS, + validateLifecyclePolicy +} = require('../validate-lifecycle-policy'); + +function makePackage(t, packageJson, files = []) { + const packageDir = fs.mkdtempSync( + path.join(os.tmpdir(), 'bitcore-lifecycle-policy-') + ); + t.after(() => fs.rmSync(packageDir, { recursive: true, force: true })); + fs.writeFileSync( + path.join(packageDir, 'package.json'), + `${JSON.stringify(packageJson)}\n` + ); + for (const file of files) { + fs.writeFileSync(path.join(packageDir, file), ''); + } + return packageDir; +} + +function configuration({ + allowConfig = {}, + excessPolicies = [], + missingPolicies = [], + somePoliciesAreMissing = false +} = {}) { + return async () => ({ + configs: { + lifecycle: { allowConfig, excessPolicies, missingPolicies } + }, + somePoliciesAreMissing + }); +} + +test('accepts a complete policy and inactive denials', async t => { + const packageDir = makePackage(t, { + name: 'fixture', + lavamoat: { + allowScripts: { + denied: false, + 'approved#1.0.0': true + } + } + }); + + const result = await validateLifecyclePolicy( + packageDir, + configuration({ + allowConfig: { denied: false, 'approved#1.0.0': true }, + excessPolicies: ['denied'] + }) + ); + + assert.equal(result, 'fixture'); +}); + +test('rejects every workspace hook that allow-scripts may run implicitly', async t => { + for (const hook of FORBIDDEN_WORKSPACE_HOOKS) { + await t.test(hook, async childTest => { + const packageDir = makePackage(childTest, { + name: `fixture-${hook}`, + scripts: { [hook]: 'exit 1' } + }); + await assert.rejects( + validateLifecyclePolicy(packageDir, configuration()), + new RegExp(`forbidden workspace lifecycle hooks: ${hook}`) + ); + }); + } +}); + +test('rejects an implicit node-gyp install hook', async t => { + const packageDir = makePackage(t, { name: 'fixture' }, ['binding.gyp']); + await assert.rejects( + validateLifecyclePolicy(packageDir, configuration()), + /binding\.gyp, which implies an install hook/ + ); +}); + +test('rejects missing policy entries', async t => { + const packageDir = makePackage(t, { name: 'fixture' }); + await assert.rejects( + validateLifecyclePolicy( + packageDir, + configuration({ + missingPolicies: ['dependency#1.0.0'], + somePoliciesAreMissing: true + }) + ), + /lifecycle policy is missing entries/ + ); +}); + +test('rejects inactive, unversioned, and non-boolean approvals', async t => { + const inactiveDir = makePackage(t, { + name: 'inactive', + lavamoat: { allowScripts: { 'dependency#1.0.0': true } } + }); + await assert.rejects( + validateLifecyclePolicy( + inactiveDir, + configuration({ + allowConfig: { 'dependency#1.0.0': true }, + excessPolicies: ['dependency#1.0.0'] + }) + ), + /inactive approvals/ + ); + + const unversionedDir = makePackage(t, { + name: 'unversioned', + lavamoat: { allowScripts: { dependency: true } } + }); + await assert.rejects( + validateLifecyclePolicy(unversionedDir, configuration()), + /approval for dependency is not versioned/ + ); + + const invalidDir = makePackage(t, { + name: 'invalid', + lavamoat: { allowScripts: { dependency: 'yes' } } + }); + await assert.rejects( + validateLifecyclePolicy(invalidDir, configuration()), + /decision for dependency is not boolean/ + ); +}); diff --git a/validate-and-run-allowed-scripts.sh b/validate-and-run-allowed-scripts.sh deleted file mode 100755 index 73baa7313ce..00000000000 --- a/validate-and-run-allowed-scripts.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/sh - -# Validate every Lerna-managed package's LavaMoat allow-scripts policy, -# reporting all validation failures before exiting. -# -# If all policies validate, build a fail-closed execution plan and then run -# each physical approved dependency tree at most once. Execution stops on the -# first failure. Pass --check-only to stop after successful planning without -# running any lifecycle scripts. - -set -u - -ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) -LERNA="$ROOT_DIR/node_modules/.bin/lerna" -ALLOW_SCRIPTS="$ROOT_DIR/node_modules/.bin/allow-scripts" -PLAN_ALLOWED_SCRIPTS="$ROOT_DIR/plan-allowed-scripts.js" -LIFECYCLE_COORDINATOR="$ROOT_DIR/lifecycle-plan-coordinator.js" -LIFECYCLE_RUN_WRAPPER="$ROOT_DIR/run-allowed-scripts.js" - -PACKAGE_INVENTORY= -PLAN_DIR= -GLOBAL_PLAN= -ACTIVE_CHILD= -CHECK_ONLY=false - -case "${1:-}" in - '') - ;; - --check-only) - CHECK_ONLY=true - ;; - *) - echo "Usage: $0 [--check-only]" - exit 2 - ;; -esac - -if [ "$#" -gt 1 ]; then - echo "Usage: $0 [--check-only]" - exit 2 -fi - -cleanup() { - [ -z "$PACKAGE_INVENTORY" ] || rm -f -- "$PACKAGE_INVENTORY" - [ -z "$PLAN_DIR" ] || rm -rf -- "$PLAN_DIR" - [ -z "$GLOBAL_PLAN" ] || rm -f -- "$GLOBAL_PLAN" -} - -handle_signal() { - signal_name=$1 - signal_status=$2 - if [ -n "$ACTIVE_CHILD" ]; then - kill -s "$signal_name" "$ACTIVE_CHILD" 2>/dev/null || true - wait "$ACTIVE_CHILD" 2>/dev/null || true - fi - exit "$signal_status" -} - -trap cleanup 0 -trap 'handle_signal HUP 129' HUP -trap 'handle_signal INT 130' INT -trap 'handle_signal TERM 143' TERM - -if ! PACKAGE_INVENTORY=$(mktemp); then - echo "ERROR: Unable to create a temporary package-inventory file." - exit 1 -fi - -if ! GLOBAL_PLAN=$(mktemp); then - echo "ERROR: Unable to create a temporary global-plan file." - exit 1 -fi - -if ! PLAN_DIR=$(mktemp -d); then - echo "ERROR: Unable to create a temporary lifecycle-plan directory." - exit 1 -fi - -if [ ! -x "$LERNA" ]; then - echo "ERROR: Lerna executable not found:" - echo " $LERNA" - echo "Run npm ci --ignore-scripts before running this script." - exit 1 -fi - -if [ ! -x "$ALLOW_SCRIPTS" ]; then - echo "ERROR: allow-scripts executable not found:" - echo " $ALLOW_SCRIPTS" - echo "Run npm ci --ignore-scripts before running this script." - exit 1 -fi - -if [ ! -f "$PLAN_ALLOWED_SCRIPTS" ]; then - echo "ERROR: Approved lifecycle planner not found:" - echo " $PLAN_ALLOWED_SCRIPTS" - exit 1 -fi - -if [ ! -f "$LIFECYCLE_COORDINATOR" ]; then - echo "ERROR: Lifecycle plan coordinator not found:" - echo " $LIFECYCLE_COORDINATOR" - exit 1 -fi - -if [ ! -f "$LIFECYCLE_RUN_WRAPPER" ]; then - echo "ERROR: Lifecycle execution wrapper not found:" - echo " $LIFECYCLE_RUN_WRAPPER" - exit 1 -fi - -if ! cd "$ROOT_DIR"; then - echo "ERROR: Unable to enter the repository root:" - echo " $ROOT_DIR" - exit 1 -fi - -# This structured inventory establishes only the closed expected artifact set. -# Lerna exec remains responsible for per-package invocation and working dirs. -if ! node "$LIFECYCLE_COORDINATOR" discover \ - "$ROOT_DIR" "$LERNA" > "$PACKAGE_INVENTORY"; then - echo "ERROR: Unable to establish the managed-package inventory." - exit 1 -fi - -echo "Validating LavaMoat lifecycle policies..." -echo - -if ! package_count=$(node "$LIFECYCLE_COORDINATOR" count "$PACKAGE_INVENTORY"); then - echo "ERROR: Unable to count the managed packages." - exit 1 -fi - -if [ "$package_count" -eq 0 ]; then - echo "ERROR: Lerna returned no managed packages." - exit 1 -fi - -if ! BITCORE_LIFECYCLE_PLAN_DIR="$PLAN_DIR" \ - "$LERNA" exec --concurrency 1 --no-bail --stream -- \ - node '$LERNA_ROOT_PATH/plan-allowed-scripts.js' .; then - echo - echo "ERROR: LavaMoat policy validation or lifecycle planning failed." - echo "Approved lifecycle scripts were not executed." - exit 1 -fi - -if ! node "$LIFECYCLE_COORDINATOR" global-plan \ - "$PACKAGE_INVENTORY" "$PLAN_DIR" > "$GLOBAL_PLAN"; then - echo - echo "ERROR: The global lifecycle execution plan is incomplete or invalid." - echo "Approved lifecycle scripts were not executed." - exit 1 -fi - -echo "All $package_count package policies passed validation." -echo -echo "Planning approved dependency lifecycle execution..." -echo - -if ! node "$LIFECYCLE_COORDINATOR" report "$GLOBAL_PLAN"; then - echo "ERROR: Unable to report the global lifecycle execution plan." - exit 1 -fi - -if [ "$CHECK_ONLY" = true ]; then - echo "All package policies and the approved lifecycle execution plan passed validation." - echo "Approved lifecycle scripts were not executed." - exit 0 -fi - -echo "Executing approved dependency lifecycle scripts..." -echo - -node "$LIFECYCLE_COORDINATOR" execute \ - "$GLOBAL_PLAN" "$ROOT_DIR" "$LERNA" "$LIFECYCLE_RUN_WRAPPER" & -ACTIVE_CHILD=$! -wait "$ACTIVE_CHILD" -run_status=$? -ACTIVE_CHILD= - -if [ "$run_status" -ne 0 ]; then - echo - echo "ERROR: Approved lifecycle execution failed." - echo "Exit status: $run_status" - exit "$run_status" -fi - -echo "Approved dependency lifecycle scripts completed successfully." diff --git a/validate-lifecycle-policy.js b/validate-lifecycle-policy.js new file mode 100644 index 00000000000..113a0a1cc0f --- /dev/null +++ b/validate-lifecycle-policy.js @@ -0,0 +1,112 @@ +#!/usr/bin/env node + +'use strict'; + +/** + * Validates a package's lifecycle policy compliance: + * - Rejects forbidden workspace lifecycle hooks (preinstall, install, postinstall, prepublish, prepare) + * - Rejects packages with binding.gyp (implies an install hook) + * - Ensures LavaMoat allowScripts approvals are boolean-valued, and that `true` approvals are versioned + * - Validates that the LavaMoat lifecycle policy has no missing or inactive entries + */ + +/* eslint-disable @typescript-eslint/no-require-imports */ + +const fs = require('node:fs'); +const path = require('node:path'); +const { loadAllPackageConfigurations } = require('@lavamoat/allow-scripts'); + +const FORBIDDEN_WORKSPACE_HOOKS = [ + 'preinstall', + 'install', + 'postinstall', + 'prepublish', + 'prepare' +]; + +async function validateLifecyclePolicy( + packageDirArgument, + configurationLoader = loadAllPackageConfigurations +) { + const packageDir = fs.realpathSync(packageDirArgument); + const packageJson = JSON.parse( + fs.readFileSync(path.join(packageDir, 'package.json'), 'utf8') + ); + const packageName = packageJson.name; + + if (!packageName || typeof packageName !== 'string') { + throw new Error(`${packageDir} has no package name.`); + } + if (process.env.LERNA_PACKAGE_NAME && + process.env.LERNA_PACKAGE_NAME !== packageName) { + throw new Error(`Lerna package identity mismatch for ${packageName}.`); + } + + const scripts = packageJson.scripts || {}; + const forbiddenHooks = FORBIDDEN_WORKSPACE_HOOKS.filter( + hook => typeof scripts[hook] === 'string' && scripts[hook].trim() + ); + if (forbiddenHooks.length) { + throw new Error( + `${packageName} defines forbidden workspace lifecycle hooks: ` + + forbiddenHooks.join(', ') + ); + } + if (fs.existsSync(path.join(packageDir, 'binding.gyp'))) { + throw new Error( + `${packageName} contains binding.gyp, which implies an install hook.` + ); + } + + const policy = packageJson.lavamoat?.allowScripts || {}; + // Ensure lavamoat.allowScripts values are all boolean, and that all allowedScripts (true) specify a version + for (const [pattern, decision] of Object.entries(policy)) { + if (typeof decision !== 'boolean') { + throw new Error(`${packageName}'s decision for ${pattern} is not boolean.`); + } + // allowScripts with value `true` must be versioned + if (decision && !/#.+$/.test(pattern)) { + throw new Error(`${packageName}'s approval for ${pattern} is not versioned.`); + } + } + + const result = await configurationLoader({ rootDir: packageDir }); + const lifecycle = result?.configs?.lifecycle; + if (!lifecycle || !Array.isArray(lifecycle.missingPolicies) || + !Array.isArray(lifecycle.excessPolicies) || + !lifecycle.allowConfig || typeof result.somePoliciesAreMissing !== 'boolean') { + throw new Error(`${packageName} received an unsupported LavaMoat result.`); + } + + if (result.somePoliciesAreMissing || lifecycle.missingPolicies.length) { + throw new Error(`${packageName}'s lifecycle policy is missing entries.`); + } + + const inactiveApprovals = lifecycle.excessPolicies.filter( + pattern => lifecycle.allowConfig[pattern] === true + ); + if (inactiveApprovals.length) { + throw new Error( + `${packageName} has inactive approvals: ${inactiveApprovals.join(', ')}` + ); + } + + return packageName; +} + +async function main() { + const packageName = await validateLifecyclePolicy(process.cwd()); + console.log(`PASS: ${packageName}`); +} + +if (require.main === module) { + main().catch(error => { + console.error(`ERROR: ${error.message}`); + process.exitCode = 1; + }); +} + +module.exports = { + FORBIDDEN_WORKSPACE_HOOKS, + validateLifecyclePolicy +}; From d662df59a098469dcd44602f0f992750b7c1fd59 Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Mon, 3 Aug 2026 14:25:13 -0400 Subject: [PATCH 16/17] add warning about defining package level lifecycle scripts --- DEVELOPMENT.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 6c6feb2596b..a93194d1dcd 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -98,6 +98,16 @@ canary: setup succeeds only while the root install remains inert. Keep trusted first-party setup work in explicitly named root scripts, not workspace install hooks. +> **Warning: package-level lifecycle scripts run unconditionally when +> `allowScripts` is configured.** If a managed package has any +> `lavamoat.allowScripts` entries, `allow-scripts run` will also execute that +> package's own `install`, `postinstall`, `prepublish`, and `prepare` hooks — +> regardless of whether those hooks appear in the `allowScripts` policy. +> The policy only gates *dependency* lifecycle scripts. This is by design in +> LavaMoat, but it means adding a top-level lifecycle script to a package with +> an active `allowScripts` config will cause that script to execute during +> `npm run setup`. Validate the intended behavior before adding such hooks. + ## Update dependencies When adding or updating a dependency: From 911605b06d5b363b602c191bc1ee78d7df0233ad Mon Sep 17 00:00:00 2001 From: Michael Jay Date: Wed, 5 Aug 2026 17:00:14 -0400 Subject: [PATCH 17/17] address feedback --- DEVELOPMENT.md | 27 +++++++++++++-------------- package.json | 1 + 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index a93194d1dcd..4bf4545c441 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -112,24 +112,23 @@ hooks. When adding or updating a dependency: -1. Update its manifest and lockfile. -2. Install without lifecycle scripts: +1. Manually update or add the dependency in the relevant `package.json`. +2. From the repository root, run: ```sh - npm ci --ignore-scripts - npm run bootstrap:inert + npm run update ``` -3. Populate new lifecycle paths as versionless denials: - - ```sh - npm run allow-scripts:config - ``` - -4. Review every policy change. Approve a script only when Bitcore requires its - generated artifact, and use an exact versioned `true` entry. -5. Run `npm run allow-scripts:validate`. -6. Run `npm run setup` from clean dependency trees and confirm Linux CI. + This runs `npm install` to sync the lockfile, bootstraps managed packages + without lifecycle scripts, and runs `allow-scripts:config` to populate new + lifecycle paths as versionless denials. +3. Review every policy change in the `lavamoat.allowScripts` sections. + Approve a script only when Bitcore requires its generated artifact, and use + an exact versioned `true` entry. +4. Run `npm run setup` from the repository root to validate policies, execute + approved scripts, and compile the monorepo. +5. Commit the manifest, lockfile, and policy changes, push a branch, and open a + pull request. Verify the Linux CI build passes. `allow-scripts:config` uses Lerna to inspect every managed dependency tree with the root-locked executable. It does not use `npx` or approve scripts diff --git a/package.json b/package.json index e34f4e3bdff..0e9bd2b87f0 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "compile:bitcore-node": "npm_config_ignore_scripts=true lerna run compile --scope @bitpay-labs/bitcore-node", "compile:bitcore-cli-postbuild": "npm --ignore-scripts --prefix packages/bitcore-cli run postbuild", "allow-scripts:config": "lerna exec --concurrency 1 -- \"$PWD/node_modules/.bin/allow-scripts\" auto --skip-versions", + "update": "npm install --ignore-scripts && npm run bootstrap:inert && npm run allow-scripts:config", "insight:build": "cd ./packages/insight && npm i && npm run build", "node": "cd packages/bitcore-node && npm start", "bws": "cd packages/bitcore-wallet-service && npm start",