diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9229dca..92dc944 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,3 +30,43 @@ jobs: - name: Build run: ./node_modules/.bin/subql build pezkuwi.yaml + + # The noter and payout bots ship as their own images (docker-compose.prod.yml) + # and nothing else here builds or runs them. Build each image as production + # does, then run inside it: the crypto stack must be the locked one and sign + # with every key type, and the bot must load its whole module graph and stop + # only where it reads the mnemonic that CI does not have. + bots: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - bot: noter + mode: esm + expect: 'No noter mnemonic found' + - bot: payout-bot + mode: cjs + expect: "ENOENT: no such file or directory, open '/run/secrets/payout_mnemonic'" + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Build the image + run: docker build -t bot ${{ matrix.bot }} + + - name: Crypto stack + run: docker run --rm -v "$PWD/scripts/bot-smoke.mjs:/app/bot-smoke.mjs:ro" bot node bot-smoke.mjs ${{ matrix.mode }} + + - name: The bot loads and stops at its missing mnemonic + env: + EXPECT: ${{ matrix.expect }} + run: | + set +e + out=$(timeout 60 docker run --rm bot 2>&1) + code=$? + set -e + echo "$out" + [ "$code" -ne 0 ] && [ "$code" -ne 124 ] || { echo "expected the bot to exit with an error, got $code"; exit 1; } + grep -qF "$EXPECT" <<<"$out" || { echo "expected: $EXPECT"; exit 1; } diff --git a/noter/Dockerfile b/noter/Dockerfile index 4b03601..125592c 100644 --- a/noter/Dockerfile +++ b/noter/Dockerfile @@ -1,13 +1,12 @@ -FROM node:20-alpine +FROM node:24-alpine WORKDIR /app -COPY package.json ./ -RUN npm install \ - @pezkuwi/api@^16.5.36 \ - @pezkuwi/keyring@^14.0.25 \ - @pezkuwi/util@^14.0.25 \ - @pezkuwi/util-crypto@^14.0.25 +# Install exactly what package-lock.json records, so the image runs the +# versions that were reviewed and tested rather than whatever the ranges +# resolve to on the day it is built. +COPY package.json package-lock.json ./ +RUN npm ci --omit=dev --no-audit --no-fund COPY bot.js ./ diff --git a/noter/package-lock.json b/noter/package-lock.json index 0762c9b..1b718ba 100644 --- a/noter/package-lock.json +++ b/noter/package-lock.json @@ -8,10 +8,10 @@ "name": "pezkuwi-noter-bot", "version": "1.0.0", "dependencies": { - "@pezkuwi/api": "^16.5.36", - "@pezkuwi/keyring": "^14.0.25", - "@pezkuwi/util": "^14.0.25", - "@pezkuwi/util-crypto": "^14.0.25" + "@pezkuwi/api": "^16.5.37", + "@pezkuwi/keyring": "^14.0.26", + "@pezkuwi/util": "^14.0.26", + "@pezkuwi/util-crypto": "^14.0.26" } }, "node_modules/@bizinikiwi/connect": { @@ -86,26 +86,26 @@ } }, "node_modules/@pezkuwi/api": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/api/-/api-16.5.36.tgz", - "integrity": "sha512-zlewHN64IvVsvNJpbB7U6LR8XG0O9yuO0IqS+znvLs9F2Dn9Os66X2mFFnpZNMyKurB3VWhpNWUIYvsLy8qoVg==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/api/-/api-16.5.37.tgz", + "integrity": "sha512-juDlShgJ3VOFHblg5pMZonoNoqpNrszmCYhfmA+8al53pMLp/GYcgD6xv9+Yf6rNifY7KzLTPOjjzxQDheNUsQ==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/api-augment": "16.5.36", - "@pezkuwi/api-base": "16.5.36", - "@pezkuwi/api-derive": "16.5.36", - "@pezkuwi/keyring": "14.0.25", - "@pezkuwi/rpc-augment": "16.5.36", - "@pezkuwi/rpc-core": "16.5.36", - "@pezkuwi/rpc-provider": "16.5.36", - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-augment": "16.5.36", - "@pezkuwi/types-codec": "16.5.36", - "@pezkuwi/types-create": "16.5.36", - "@pezkuwi/types-known": "16.5.36", - "@pezkuwi/types-support": "16.5.36", - "@pezkuwi/util": "14.0.25", - "@pezkuwi/util-crypto": "14.0.25", + "@pezkuwi/api-augment": "16.5.37", + "@pezkuwi/api-base": "16.5.37", + "@pezkuwi/api-derive": "16.5.37", + "@pezkuwi/keyring": "14.0.26", + "@pezkuwi/rpc-augment": "16.5.37", + "@pezkuwi/rpc-core": "16.5.37", + "@pezkuwi/rpc-provider": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-augment": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/types-create": "16.5.37", + "@pezkuwi/types-known": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", "eventemitter3": "^5.0.1", "rxjs": "^7.8.1", "tslib": "^2.8.1" @@ -115,17 +115,17 @@ } }, "node_modules/@pezkuwi/api-augment": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/api-augment/-/api-augment-16.5.36.tgz", - "integrity": "sha512-f42DSdMTKAVQywYaUcnDoxGS8DFvb4hfAxSghOJYONlH6LyBkfkWbRITh9mKrSoxDcovM44GhuiC6SxNXTx9cQ==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/api-augment/-/api-augment-16.5.37.tgz", + "integrity": "sha512-EfQZuebTbO0sFNWUN7+DTBeH38X70rZPj0oV/VnMFO/LT3bFCqOdbFCyV14j7FvEheZ6yajPQ3+uJknuVM7Ytg==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/api-base": "16.5.36", - "@pezkuwi/rpc-augment": "16.5.36", - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-augment": "16.5.36", - "@pezkuwi/types-codec": "16.5.36", - "@pezkuwi/util": "14.0.25", + "@pezkuwi/api-base": "16.5.37", + "@pezkuwi/rpc-augment": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-augment": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/util": "14.0.26", "tslib": "^2.8.1" }, "engines": { @@ -133,14 +133,14 @@ } }, "node_modules/@pezkuwi/api-base": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/api-base/-/api-base-16.5.36.tgz", - "integrity": "sha512-czmyuDZkA4Qi7hkFLR8KmnHMyQjM0GJXyS92rdylFPip5FZb9cdys5j1B79gKTVirhTynVACB5FCYnwpWtf5Lg==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/api-base/-/api-base-16.5.37.tgz", + "integrity": "sha512-DTh1/xaUmjyudQxMCWFOxmCrC+Oar5duZa9z4k2BSKdqS48PKWVUlpo36GquH/Iu3fzdoYG59ZF07KAP94Eq3w==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/rpc-core": "16.5.36", - "@pezkuwi/types": "16.5.36", - "@pezkuwi/util": "14.0.25", + "@pezkuwi/rpc-core": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/util": "14.0.26", "rxjs": "^7.8.1", "tslib": "^2.8.1" }, @@ -149,21 +149,21 @@ } }, "node_modules/@pezkuwi/api-derive": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/api-derive/-/api-derive-16.5.36.tgz", - "integrity": "sha512-tiyiQZFCOStzzclfQdgKpVpg8iZX6sqO01IIEvqRiJfTgaglUfGunmsicvVgFz0rwgVkodDTpkgwSGq1lZl/FQ==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/api-derive/-/api-derive-16.5.37.tgz", + "integrity": "sha512-cDyRUUZ6hNcL6H2lLcig/NihpgynyEkpTjXZ19MqPAYaP3Uu60rlkZBQ2QLIJOKBF8DUN/pDEh5puh/+w9VhAA==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/api": "16.5.36", - "@pezkuwi/api-augment": "16.5.36", - "@pezkuwi/api-base": "16.5.36", - "@pezkuwi/rpc-core": "16.5.36", - "@pezkuwi/rpc-provider": "16.5.36", - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-codec": "16.5.36", - "@pezkuwi/types-support": "16.5.36", - "@pezkuwi/util": "14.0.25", - "@pezkuwi/util-crypto": "14.0.25", + "@pezkuwi/api": "16.5.37", + "@pezkuwi/api-augment": "16.5.37", + "@pezkuwi/api-base": "16.5.37", + "@pezkuwi/rpc-core": "16.5.37", + "@pezkuwi/rpc-provider": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", "rxjs": "^7.8.1", "tslib": "^2.8.1" }, @@ -172,30 +172,30 @@ } }, "node_modules/@pezkuwi/keyring": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/keyring/-/keyring-14.0.25.tgz", - "integrity": "sha512-EJBA4u2Sw4bpPjjTvmVi8ggRAEblq/L3D/SiaEn40ftv0qJGziluxEaYG4/iTVXmfbCuzu9xNKbIwmWldBWQBQ==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/keyring/-/keyring-14.0.26.tgz", + "integrity": "sha512-stcWcKFKgS1DbIq1CTRzPdpOXuLudFiRPN8MZ0B8COJGKkqElHleWEWC55nhjG3bLZaTUHveuAsMURhu3wHAbg==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/util": "14.0.25", - "@pezkuwi/util-crypto": "14.0.25", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", "tslib": "^2.8.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@pezkuwi/util": "14.0.25", - "@pezkuwi/util-crypto": "14.0.25" + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26" } }, "node_modules/@pezkuwi/networks": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/networks/-/networks-14.0.25.tgz", - "integrity": "sha512-wTkWXwWWv/YU6KYx/Z1o98x0/6GV7H1demRT0NmOhXrlnWvSbReXsvm0YTnZlqArLuAPAhJlFi2jzfbARKZh+g==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/networks/-/networks-14.0.26.tgz", + "integrity": "sha512-omDbJzFjDSm1FS32zebyNP1QGBk9/ZayM0YM0mUlOOwiLIP7iDVq3KQe2JdI7hm1dz01Lm68/hjerSoqiWEclA==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/util": "14.0.25", + "@pezkuwi/util": "14.0.26", "@substrate/ss58-registry": "^1.51.0", "tslib": "^2.8.0" }, @@ -204,15 +204,15 @@ } }, "node_modules/@pezkuwi/rpc-augment": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-augment/-/rpc-augment-16.5.36.tgz", - "integrity": "sha512-u7nqzDJpqjVZbFwWYIQAeKegI7XZ7XmD1d2LtoOoA/FKBzH6HDgGK3kEIodRBM6w8LuqyB9h8oXK/DrxR1OElg==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-augment/-/rpc-augment-16.5.37.tgz", + "integrity": "sha512-WvHG9Zu/d3eaDgsf/SAHEAoPdkeDZ6BXAhLsWJEVaFL8eT5bLpuf3qOoZ7b7rRegaW5KfGlhXluiJSDuB6Q3Lg==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/rpc-core": "16.5.36", - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-codec": "16.5.36", - "@pezkuwi/util": "14.0.25", + "@pezkuwi/rpc-core": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/util": "14.0.26", "tslib": "^2.8.1" }, "engines": { @@ -220,16 +220,16 @@ } }, "node_modules/@pezkuwi/rpc-core": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-core/-/rpc-core-16.5.36.tgz", - "integrity": "sha512-duGBL4Lt17+ireW8Ku3Mtb700f21kw8qGkAvvhwp9G+949ZcwbpHWlToZ7umQe1qTQS8iTiMvA/xpH3HXg2UQw==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-core/-/rpc-core-16.5.37.tgz", + "integrity": "sha512-waP8ieN89eKAXsUx1Y1rHn2k9snRgUJhiEfox2by9X0Unbap5GAbDG/pu1buBBxpYz4Jni4zVgdV1aoAya8vJQ==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/keyring": "14.0.25", - "@pezkuwi/rpc-augment": "16.5.36", - "@pezkuwi/rpc-provider": "16.5.36", - "@pezkuwi/types": "16.5.36", - "@pezkuwi/util": "14.0.25", + "@pezkuwi/keyring": "14.0.26", + "@pezkuwi/rpc-augment": "16.5.37", + "@pezkuwi/rpc-provider": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/util": "14.0.26", "rxjs": "^7.8.1", "tslib": "^2.8.1" }, @@ -238,19 +238,19 @@ } }, "node_modules/@pezkuwi/rpc-provider": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-provider/-/rpc-provider-16.5.36.tgz", - "integrity": "sha512-kNaLr+yx99MsmxBFf+VPZV+0GglHNrhNie9O6QWbQj8R6CGVN/dB39ohSHoAh0wJXPzumhLiQ8tFOlj3Czh6FQ==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-provider/-/rpc-provider-16.5.37.tgz", + "integrity": "sha512-B727rg9hOBON+CwSffJCFpfKjkMbaDvEGs+HyDnUvZjU8yFp4b/WW7yax84ZL5Dv9dOm1WPDoPKDA1w1+JVqdw==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/keyring": "14.0.25", - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-support": "16.5.36", - "@pezkuwi/util": "14.0.25", - "@pezkuwi/util-crypto": "14.0.25", - "@pezkuwi/x-fetch": "14.0.25", - "@pezkuwi/x-global": "14.0.25", - "@pezkuwi/x-ws": "14.0.25", + "@pezkuwi/keyring": "14.0.26", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", + "@pezkuwi/x-fetch": "14.0.26", + "@pezkuwi/x-global": "14.0.26", + "@pezkuwi/x-ws": "14.0.26", "eventemitter3": "^5.0.1", "mock-socket": "^9.3.1", "nock": "^13.5.5", @@ -274,18 +274,18 @@ } }, "node_modules/@pezkuwi/types": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/types/-/types-16.5.36.tgz", - "integrity": "sha512-8g5PxNHzpT0aH3mUWsICnpRdgXAMTzN3PK68xlPLujN8op41d5IoLY9HzeVYFVAndCiaKxXSusOsVeDusVmY4g==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types/-/types-16.5.37.tgz", + "integrity": "sha512-sMNw7xJMLkv4qgGJTQkFe1oyyWVRcDxDswJFUc3P90KkKDdPlBRtJDEqG3L1MnFv5ES4c3WGTDhdUXXiKFppiA==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/keyring": "14.0.25", - "@pezkuwi/types-augment": "16.5.36", - "@pezkuwi/types-codec": "16.5.36", - "@pezkuwi/types-create": "16.5.36", - "@pezkuwi/types-support": "16.5.36", - "@pezkuwi/util": "14.0.25", - "@pezkuwi/util-crypto": "14.0.25", + "@pezkuwi/keyring": "14.0.26", + "@pezkuwi/types-augment": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/types-create": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", "rxjs": "^7.8.1", "tslib": "^2.8.1" }, @@ -294,14 +294,14 @@ } }, "node_modules/@pezkuwi/types-augment": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/types-augment/-/types-augment-16.5.36.tgz", - "integrity": "sha512-Uxk+/7SBifqbFkGhWavb47uHP7PFHHNKiC+1rD7R8ilYTR/RO6o4VbLoq51S4ng7h+P6rqf/5ABTWbE1MOTPXg==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-augment/-/types-augment-16.5.37.tgz", + "integrity": "sha512-JcXtBFg9p99speS5RI1Sh0SQZWlD+SO1nMkxQ3HGwzKQG842B0/UrMykkpP7hxZ6rGDDIepnX8ytqqslZXUZ2A==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-codec": "16.5.36", - "@pezkuwi/util": "14.0.25", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/util": "14.0.26", "tslib": "^2.8.1" }, "engines": { @@ -309,17 +309,17 @@ } }, "node_modules/@pezkuwi/types-codec": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/types-codec/-/types-codec-16.5.36.tgz", - "integrity": "sha512-ETAG5yubw1kA0esORBwtLYwEQTfPZvMcQYniyRjqLebXU/Vht+NASmMNUNZ9MvtyqQs4BdPmLkAU5ZJiRyhO4w==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-codec/-/types-codec-16.5.37.tgz", + "integrity": "sha512-Bu3Kq0URBDd3CskZWsKPP/jb4Q6PnFJ/R7p8RPF1P1TZQ5fhSEKbDZ8+qpkrfPHQGFDrBMnAGVTtot08cVbHiw==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-augment": "16.5.36", - "@pezkuwi/types-support": "16.5.36", - "@pezkuwi/util": "14.0.25", - "@pezkuwi/util-crypto": "14.0.25", - "@pezkuwi/x-bigint": "14.0.25", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-augment": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", + "@pezkuwi/x-bigint": "14.0.26", "tslib": "^2.8.1" }, "engines": { @@ -327,14 +327,14 @@ } }, "node_modules/@pezkuwi/types-create": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/types-create/-/types-create-16.5.36.tgz", - "integrity": "sha512-xZ2knB+wGnFFOeIy+0b56P6OUCZtzNcP0fk24umN/SCEs2a212QMhQ7Fyd9lhJZSmnZqiOljQaw5VRGqblMtlQ==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-create/-/types-create-16.5.37.tgz", + "integrity": "sha512-iViQ2wnIHWrv4OkL33eIxc9Z9eE8THZWkyEIn3a/jXnLij0H1unlzOXwcdsAe5lKhADamZDsMIBlQ5bYzsGSSg==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-codec": "16.5.36", - "@pezkuwi/util": "14.0.25", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/util": "14.0.26", "tslib": "^2.8.1" }, "engines": { @@ -342,16 +342,16 @@ } }, "node_modules/@pezkuwi/types-known": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/types-known/-/types-known-16.5.36.tgz", - "integrity": "sha512-niILSGCNt2s/GsbnFwBcoxi35y6CI7Y/HMKm3ZyKk9hwiY70wnfJK2DIu9ObBSXalRxbD0Sni9T3XZmYxIxhkQ==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-known/-/types-known-16.5.37.tgz", + "integrity": "sha512-+c1Fk3CQ0eIkv6brwfv8A64E9lSLg5XPFW4x7h5fR34PzpdfTvP7R2xcBIVlIkHd3JQUTsGP/zNXWHCi1EpHJg==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/networks": "14.0.25", - "@pezkuwi/types": "16.5.36", - "@pezkuwi/types-codec": "16.5.36", - "@pezkuwi/types-create": "16.5.36", - "@pezkuwi/util": "14.0.25", + "@pezkuwi/networks": "14.0.26", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/types-create": "16.5.37", + "@pezkuwi/util": "14.0.26", "tslib": "^2.8.1" }, "engines": { @@ -359,12 +359,12 @@ } }, "node_modules/@pezkuwi/types-support": { - "version": "16.5.36", - "resolved": "https://registry.npmjs.org/@pezkuwi/types-support/-/types-support-16.5.36.tgz", - "integrity": "sha512-+EWMQjs50e5eHPX5jZ4HnTqCQxhRJf/FioGfJtBqpchW0dypg08blz6qw48Y2oQ3lUsA2s4wZbObIBIfO5xtYA==", + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-support/-/types-support-16.5.37.tgz", + "integrity": "sha512-rfi7qhSysUweQEyAfe/qk26M2HZotf/xylb6gcfhWJkwiSURhW4Jof/1Rye5SSssk7nCfQcgfYUFDE+oWOHuog==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/util": "14.0.25", + "@pezkuwi/util": "14.0.26", "tslib": "^2.8.1" }, "engines": { @@ -372,15 +372,15 @@ } }, "node_modules/@pezkuwi/util": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/util/-/util-14.0.25.tgz", - "integrity": "sha512-OCqCieVmdI74c8GfSLkuC1xpcMJTIez5YxWcVssxR0NpA462fXc1uHaIZBit/aHgYXn18G3TMeGBxSx1DVLWpg==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/util/-/util-14.0.26.tgz", + "integrity": "sha512-xV7uct4jtIqf+9LixcCoTgYz8JEZ2eK6aosMD92Zu5DRPSW87QcCYBQuq8Phec0LdjGvC/l7DgiloQODhTtHWA==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/x-bigint": "14.0.25", - "@pezkuwi/x-global": "14.0.25", - "@pezkuwi/x-textdecoder": "14.0.25", - "@pezkuwi/x-textencoder": "14.0.25", + "@pezkuwi/x-bigint": "14.0.26", + "@pezkuwi/x-global": "14.0.26", + "@pezkuwi/x-textdecoder": "14.0.26", + "@pezkuwi/x-textencoder": "14.0.26", "@types/bn.js": "^5.1.6", "bn.js": "^5.2.1", "tslib": "^2.8.0" @@ -390,20 +390,20 @@ } }, "node_modules/@pezkuwi/util-crypto": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/util-crypto/-/util-crypto-14.0.25.tgz", - "integrity": "sha512-SZLOx8J8+l9oEHOPOFbzcdKeyr7zvGOgD1WQ74ylYTZN+VRzMvSYOAio8HZObwSc5dc0mmzoc5HlrpFFDreNBQ==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/util-crypto/-/util-crypto-14.0.26.tgz", + "integrity": "sha512-YR+3N2FwKx3q9NF11q75O0lJ+SKpM9CNKPE7rLEoPvFt7wpHpB/GXOAekYhNtrotkcsI8v/WoyOi4RI9NiwYVQ==", "license": "Apache-2.0", "dependencies": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@pezkuwi/networks": "14.0.25", + "@noble/curves": "^1.9.7", + "@noble/hashes": "^1.8.0", + "@pezkuwi/networks": "14.0.26", "@pezkuwi/scure-sr25519": "^0.2.1", - "@pezkuwi/util": "14.0.25", - "@pezkuwi/wasm-crypto": "7.5.17", - "@pezkuwi/wasm-util": "7.5.17", - "@pezkuwi/x-bigint": "14.0.25", - "@pezkuwi/x-randomvalues": "14.0.25", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/wasm-crypto": "^7.5.20", + "@pezkuwi/wasm-util": "^7.5.20", + "@pezkuwi/x-bigint": "14.0.26", + "@pezkuwi/x-randomvalues": "14.0.26", "@scure/base": "^1.1.7", "tslib": "^2.8.0" }, @@ -411,16 +411,16 @@ "node": ">=18" }, "peerDependencies": { - "@pezkuwi/util": "14.0.25" + "@pezkuwi/util": "14.0.26" } }, "node_modules/@pezkuwi/wasm-bridge": { - "version": "7.5.17", - "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-bridge/-/wasm-bridge-7.5.17.tgz", - "integrity": "sha512-7mk6+9XzPReP60MLl+oxeq3SxadK13J4LfmzJWa2Bl08SyTwrpOPgD1ohowd1IvBVbMgnqPGr6BDnso8lEI1fw==", + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-bridge/-/wasm-bridge-7.5.20.tgz", + "integrity": "sha512-JKgDtLvQzT6uBfD8PcSD7Nud4OB8u6BJjABADDLxFrxHPsKbQNnkTd6f/27GfbkOJL4p17fWwoACICp/oEDxCw==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/wasm-util": "7.5.17", + "@pezkuwi/wasm-util": "7.5.20", "tslib": "^2.7.0" }, "engines": { @@ -432,17 +432,17 @@ } }, "node_modules/@pezkuwi/wasm-crypto": { - "version": "7.5.17", - "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto/-/wasm-crypto-7.5.17.tgz", - "integrity": "sha512-RmXyo3V4VIUqlInRtsolD90Tg6iLgSGyZ8EFbKqnvzmoKreVA3ybnW8gqBxioQXkfCQKl63jnSAmd3mV0VwYNg==", + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto/-/wasm-crypto-7.5.20.tgz", + "integrity": "sha512-7yo9CjFMiqzpWdVn8ZCT93YG4pMnmk/VzYzviSmXzzfY13wVW0M8VwwXijq5h9b3qTtaZR+F/fEPr0eUT9sO1g==", "license": "Apache-2.0", "dependencies": { "@noble/hashes": "^1.3.3", - "@pezkuwi/wasm-bridge": "7.5.17", - "@pezkuwi/wasm-crypto-asmjs": "7.5.17", - "@pezkuwi/wasm-crypto-init": "7.5.17", - "@pezkuwi/wasm-crypto-wasm": "7.5.17", - "@pezkuwi/wasm-util": "7.5.17", + "@pezkuwi/wasm-bridge": "7.5.20", + "@pezkuwi/wasm-crypto-asmjs": "7.5.20", + "@pezkuwi/wasm-crypto-init": "7.5.20", + "@pezkuwi/wasm-crypto-wasm": "7.5.20", + "@pezkuwi/wasm-util": "7.5.20", "tslib": "^2.7.0" }, "engines": { @@ -454,9 +454,9 @@ } }, "node_modules/@pezkuwi/wasm-crypto-asmjs": { - "version": "7.5.17", - "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.5.17.tgz", - "integrity": "sha512-akM7/goSqYenoQXQYYiMP2esxka6IaqhcidKB54FAucvtIO5O2LtbAfCeNN+e5xyiAeTcTUXbSrVzDOd4+3czA==", + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.5.20.tgz", + "integrity": "sha512-Yvd1168GjXREiOViGb+veXbEYBWEv2wS5qPZMeI7g3FeGx8pBbczvi29cTa5j/U5dmdq7ryb8rLKoXEFWG2Xkw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.7.0" @@ -469,15 +469,15 @@ } }, "node_modules/@pezkuwi/wasm-crypto-init": { - "version": "7.5.17", - "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-init/-/wasm-crypto-init-7.5.17.tgz", - "integrity": "sha512-q/T6sj8bFL2JPeTmSGbwd8E4LpK+hKdAhDR86jrZ/rKMNuLnYMSYuiR7GraymYFqlG2yLZoJihKn5b8J40YjaQ==", + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-init/-/wasm-crypto-init-7.5.20.tgz", + "integrity": "sha512-rtsGn81dvnlb1Qmlm8hPaXOlE6Cn0rrvYUirNEHLvn55D6irGEoCEuON9nNuGjamw09En8GrK3P59Y2mDkFCmw==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/wasm-bridge": "7.5.17", - "@pezkuwi/wasm-crypto-asmjs": "7.5.17", - "@pezkuwi/wasm-crypto-wasm": "7.5.17", - "@pezkuwi/wasm-util": "7.5.17", + "@pezkuwi/wasm-bridge": "7.5.20", + "@pezkuwi/wasm-crypto-asmjs": "7.5.20", + "@pezkuwi/wasm-crypto-wasm": "7.5.20", + "@pezkuwi/wasm-util": "7.5.20", "tslib": "^2.7.0" }, "engines": { @@ -489,12 +489,12 @@ } }, "node_modules/@pezkuwi/wasm-crypto-wasm": { - "version": "7.5.17", - "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-wasm/-/wasm-crypto-wasm-7.5.17.tgz", - "integrity": "sha512-yg9/ldrHSUaIJ+db7vuPkU6DBw/SAuU4kK2L05LEbFeC093SfRS4f0qnIwNhlgjEJVsAfSWjZXOGBAM1Mc8aHg==", + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-wasm/-/wasm-crypto-wasm-7.5.20.tgz", + "integrity": "sha512-znId0RjOrHNTcMHtifW3IVYTJiDt/pVTjQC5MHA1KqBDuiEFHWFWKcGVe/aieXN4pvLqCZZtm4G1X80qDBHdTQ==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/wasm-util": "7.5.17", + "@pezkuwi/wasm-util": "7.5.20", "tslib": "^2.7.0" }, "engines": { @@ -505,9 +505,9 @@ } }, "node_modules/@pezkuwi/wasm-util": { - "version": "7.5.17", - "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-util/-/wasm-util-7.5.17.tgz", - "integrity": "sha512-MHodOmAuldNmmkTwZgGmSvCvUbhgR79N6biG6QVXrUtwVGUK37IUx/195T1cG0IZaSjLsWwz3olhksto5z54Lw==", + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-util/-/wasm-util-7.5.20.tgz", + "integrity": "sha512-bYHtbtiDdBtK/SRQMtMFGhrk4BvTe85vPqPI4CwDt8tJUmEuLgl0uHNJd9jSUcK784EQdo5E3yKYksGaHy80dQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.7.0" @@ -520,12 +520,12 @@ } }, "node_modules/@pezkuwi/x-bigint": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/x-bigint/-/x-bigint-14.0.25.tgz", - "integrity": "sha512-9CG28jPK0EUuXTn8QWnsYjXycfHBVQCR5QGJ17hgRenzRRDzoIB5unhC0XklcIh5U/KO88TPRVZKKiwSfQXlKg==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-bigint/-/x-bigint-14.0.26.tgz", + "integrity": "sha512-TiCUVJiW07KurXot79AuKsqdIKGCtysMVDKLGlUc7mxlDJ+BCNJVmi9D0vvbB/gboxfJqONFQKt8eOXHKFg1iw==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/x-global": "14.0.25", + "@pezkuwi/x-global": "14.0.26", "tslib": "^2.8.0" }, "engines": { @@ -533,12 +533,12 @@ } }, "node_modules/@pezkuwi/x-fetch": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/x-fetch/-/x-fetch-14.0.25.tgz", - "integrity": "sha512-fiNYdYMq0OdYsSUwVBA68eKieeQ+PJYniEeCRNvkMUN1LUWMzdv9zTTPRtsGUEGm12y9uUgymgD92eo4PSoJog==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-fetch/-/x-fetch-14.0.26.tgz", + "integrity": "sha512-XVpFZ/Bk1l7dKYcC+1RMJlvQEbbyfQ/Ou4I8rTSv6MvaCtfD3vl0TxolHnhwA564eyemLfoidF/Kvbfmnz7mlg==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/x-global": "14.0.25", + "@pezkuwi/x-global": "14.0.26", "node-fetch": "^3.3.2", "tslib": "^2.8.0" }, @@ -547,9 +547,9 @@ } }, "node_modules/@pezkuwi/x-global": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/x-global/-/x-global-14.0.25.tgz", - "integrity": "sha512-WxY0dCOWFfqqd2jtLNX8BmJMCR5NTlc9QBuL3u4TwF6yAc4jKqlq3F1J1vAMESnBwnR1jUepKgn+2dpGuspJYw==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-global/-/x-global-14.0.26.tgz", + "integrity": "sha512-3D/dgFUugJfJ59JETey2EPpWL7X7NOrSEgNj1Rt3Vu9zR74QNocc5HEcyapFKj2hNNp5gPPDOOWbrLkkDnbdXw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -559,29 +559,29 @@ } }, "node_modules/@pezkuwi/x-randomvalues": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/x-randomvalues/-/x-randomvalues-14.0.25.tgz", - "integrity": "sha512-Kkbkdv8e2XZEnhwJHaqM27wKn25fc/Dt6neGy3x150AVuf4EjWnM0Q9pNVC4WQKbThvDQ8SvzCdfZos4Lae8sA==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-randomvalues/-/x-randomvalues-14.0.26.tgz", + "integrity": "sha512-9tQ5+e7b5sC6y7NWFojfkfKZNSmWBpB1dnuyMv5vJMPlBPlsscTYARfk8ln860XWLdemQBYBvYbibmEBtLFfSQ==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/x-global": "14.0.25", + "@pezkuwi/x-global": "14.0.26", "tslib": "^2.8.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@pezkuwi/util": "14.0.25", - "@pezkuwi/wasm-util": "7.5.17" + "@pezkuwi/util": "14.0.26", + "@pezkuwi/wasm-util": "*" } }, "node_modules/@pezkuwi/x-textdecoder": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/x-textdecoder/-/x-textdecoder-14.0.25.tgz", - "integrity": "sha512-ecse2X9BKG164BfCesCZfL3lZU+XAdLjaOKzLqPB+hlTshHVnnSAvUvZNaw4zq9ztBVhhktxZ9K27S1w8ZANMg==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-textdecoder/-/x-textdecoder-14.0.26.tgz", + "integrity": "sha512-O3l/pcT+7q89COMe+h+Gr+HLLym3k0RfWXWwEg6RYGBHxp77GfixwqAR/o6k6rBXNfxlAY60RcYUqu+DGkKSZw==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/x-global": "14.0.25", + "@pezkuwi/x-global": "14.0.26", "tslib": "^2.8.0" }, "engines": { @@ -589,12 +589,12 @@ } }, "node_modules/@pezkuwi/x-textencoder": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/x-textencoder/-/x-textencoder-14.0.25.tgz", - "integrity": "sha512-0R25a5V8ykoHCHwl2zYsW6FxQlGdPgHiaGUUqY4wfnNAyUsolsm1YU772vfNfARdLN6K+jiRdQ6I6RW114LtgQ==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-textencoder/-/x-textencoder-14.0.26.tgz", + "integrity": "sha512-aUk+h0g5iO+V3CZV1vdlRy4G9MbE0SbomB5Lw/8IkuQ+wNPK9JQ1FlArMhxVBfXM9JD8DPih/ViZsaNhWfjVVw==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/x-global": "14.0.25", + "@pezkuwi/x-global": "14.0.26", "tslib": "^2.8.0" }, "engines": { @@ -602,12 +602,12 @@ } }, "node_modules/@pezkuwi/x-ws": { - "version": "14.0.25", - "resolved": "https://registry.npmjs.org/@pezkuwi/x-ws/-/x-ws-14.0.25.tgz", - "integrity": "sha512-YwbnTl+EF3Gtp2qrs/23Qo2FkpPB2y+0HGa4XovyfbDk7iAXJuIAAw0sq2StxVF1NsSm0DZIyX1GJU+nyM/5Pw==", + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-ws/-/x-ws-14.0.26.tgz", + "integrity": "sha512-ZAvB5WgDJXSkunlZ/b2X/CJaft1eHztoWKO7SYgahk8NftAEIFet1SnWJoYL4TPvM/B9ReacNislIQXGwH0WYQ==", "license": "Apache-2.0", "dependencies": { - "@pezkuwi/x-global": "14.0.25", + "@pezkuwi/x-global": "14.0.26", "tslib": "^2.8.0", "ws": "^8.18.0" }, @@ -640,12 +640,12 @@ } }, "node_modules/@types/node": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", - "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", + "version": "26.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", + "integrity": "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==", "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~8.9.0" } }, "node_modules/bn.js": { @@ -829,9 +829,9 @@ "license": "0BSD" }, "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==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", "license": "MIT" }, "node_modules/web-streams-polyfill": { diff --git a/noter/package.json b/noter/package.json index ce50ff5..9a6e057 100644 --- a/noter/package.json +++ b/noter/package.json @@ -8,9 +8,10 @@ "dev": "node --watch bot.js" }, "dependencies": { - "@pezkuwi/api": "^16.5.36", - "@pezkuwi/keyring": "^14.0.25", - "@pezkuwi/util": "^14.0.25", - "@pezkuwi/util-crypto": "^14.0.25" - } + "@pezkuwi/api": "^16.5.37", + "@pezkuwi/keyring": "^14.0.26", + "@pezkuwi/util": "^14.0.26", + "@pezkuwi/util-crypto": "^14.0.26" + }, + "private": true } diff --git a/payout-bot/Dockerfile b/payout-bot/Dockerfile index 70680d6..125592c 100644 --- a/payout-bot/Dockerfile +++ b/payout-bot/Dockerfile @@ -1,9 +1,13 @@ -FROM node:20-alpine +FROM node:24-alpine + WORKDIR /app -RUN npm install \ - @pezkuwi/api@^16.5.36 \ - @pezkuwi/keyring@^14.0.25 \ - @pezkuwi/util@^14.0.25 \ - @pezkuwi/util-crypto@^14.0.25 + +# Install exactly what package-lock.json records, so the image runs the +# versions that were reviewed and tested rather than whatever the ranges +# resolve to on the day it is built. +COPY package.json package-lock.json ./ +RUN npm ci --omit=dev --no-audit --no-fund + COPY bot.js ./ + CMD ["node", "bot.js"] diff --git a/payout-bot/package-lock.json b/payout-bot/package-lock.json new file mode 100644 index 0000000..d59c360 --- /dev/null +++ b/payout-bot/package-lock.json @@ -0,0 +1,868 @@ +{ + "name": "pezkuwi-payout-bot", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pezkuwi-payout-bot", + "version": "1.0.0", + "dependencies": { + "@pezkuwi/api": "^16.5.37", + "@pezkuwi/keyring": "^14.0.26", + "@pezkuwi/util": "^14.0.26", + "@pezkuwi/util-crypto": "^14.0.26" + } + }, + "node_modules/@bizinikiwi/connect": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@bizinikiwi/connect/-/connect-2.1.9.tgz", + "integrity": "sha512-dHzMerp2f/Q/xhroUVXTLPIqn6PRBBorGwg/Y1L9TWS9Za8L7J3Iw0XJhN3KI2yqdywOGSYM+hMLuGcvkncgkQ==", + "license": "GPL-3.0-only", + "optional": true, + "dependencies": { + "@bizinikiwi/connect-extension-protocol": "^2.2.2", + "@bizinikiwi/connect-known-chains": "^1.10.3", + "@bizinikiwi/smoldot-discovery": "^2.0.3", + "smoldot": "^2.0.34" + } + }, + "node_modules/@bizinikiwi/connect-extension-protocol": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@bizinikiwi/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz", + "integrity": "sha512-2xsfJNAEQqZG1LBxdDzKreBFsvldqTDiC7xGNX/6avWPQDcIkm1gHtVYJ+Yw9wvsEodMrg3gBV87rcFJVgNV/g==", + "license": "GPL-3.0-only", + "optional": true + }, + "node_modules/@bizinikiwi/connect-known-chains": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@bizinikiwi/connect-known-chains/-/connect-known-chains-1.10.3.tgz", + "integrity": "sha512-MIL+JP/RkkX4ytoxm4enok4OP+k5rAaBM+yNBCdJataTPQ8OrTuv4FGwBXc7SpMZeRado/v+WmiwQT5qFbISRg==", + "license": "GPL-3.0-only", + "optional": true + }, + "node_modules/@bizinikiwi/discovery": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@bizinikiwi/discovery/-/discovery-0.2.2.tgz", + "integrity": "sha512-LSq3/4Fb7i3YNzGW9r9ZVvLR6ojlXPUbhfheoKFncG+IwXKKSP6CMIB8QpRGRKMgr15k4L4rQp0awBWhEVdPyQ==", + "license": "MIT", + "optional": true + }, + "node_modules/@bizinikiwi/smoldot-discovery": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@bizinikiwi/smoldot-discovery/-/smoldot-discovery-2.0.3.tgz", + "integrity": "sha512-7iInxXewJaRZJk+nD89g88uvo1Fhut76cqHi4xCLgZw0dqDhrEzq8LO5MYbISEkZLL4nAANPCmBa0Ohm47fSMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@bizinikiwi/discovery": "^0.2.2" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@pezkuwi/api": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/api/-/api-16.5.37.tgz", + "integrity": "sha512-juDlShgJ3VOFHblg5pMZonoNoqpNrszmCYhfmA+8al53pMLp/GYcgD6xv9+Yf6rNifY7KzLTPOjjzxQDheNUsQ==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/api-augment": "16.5.37", + "@pezkuwi/api-base": "16.5.37", + "@pezkuwi/api-derive": "16.5.37", + "@pezkuwi/keyring": "14.0.26", + "@pezkuwi/rpc-augment": "16.5.37", + "@pezkuwi/rpc-core": "16.5.37", + "@pezkuwi/rpc-provider": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-augment": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/types-create": "16.5.37", + "@pezkuwi/types-known": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/api-augment": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/api-augment/-/api-augment-16.5.37.tgz", + "integrity": "sha512-EfQZuebTbO0sFNWUN7+DTBeH38X70rZPj0oV/VnMFO/LT3bFCqOdbFCyV14j7FvEheZ6yajPQ3+uJknuVM7Ytg==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/api-base": "16.5.37", + "@pezkuwi/rpc-augment": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-augment": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/util": "14.0.26", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/api-base": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/api-base/-/api-base-16.5.37.tgz", + "integrity": "sha512-DTh1/xaUmjyudQxMCWFOxmCrC+Oar5duZa9z4k2BSKdqS48PKWVUlpo36GquH/Iu3fzdoYG59ZF07KAP94Eq3w==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/rpc-core": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/util": "14.0.26", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/api-derive": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/api-derive/-/api-derive-16.5.37.tgz", + "integrity": "sha512-cDyRUUZ6hNcL6H2lLcig/NihpgynyEkpTjXZ19MqPAYaP3Uu60rlkZBQ2QLIJOKBF8DUN/pDEh5puh/+w9VhAA==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/api": "16.5.37", + "@pezkuwi/api-augment": "16.5.37", + "@pezkuwi/api-base": "16.5.37", + "@pezkuwi/rpc-core": "16.5.37", + "@pezkuwi/rpc-provider": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/keyring": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/keyring/-/keyring-14.0.26.tgz", + "integrity": "sha512-stcWcKFKgS1DbIq1CTRzPdpOXuLudFiRPN8MZ0B8COJGKkqElHleWEWC55nhjG3bLZaTUHveuAsMURhu3wHAbg==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26" + } + }, + "node_modules/@pezkuwi/networks": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/networks/-/networks-14.0.26.tgz", + "integrity": "sha512-omDbJzFjDSm1FS32zebyNP1QGBk9/ZayM0YM0mUlOOwiLIP7iDVq3KQe2JdI7hm1dz01Lm68/hjerSoqiWEclA==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/util": "14.0.26", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/rpc-augment": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-augment/-/rpc-augment-16.5.37.tgz", + "integrity": "sha512-WvHG9Zu/d3eaDgsf/SAHEAoPdkeDZ6BXAhLsWJEVaFL8eT5bLpuf3qOoZ7b7rRegaW5KfGlhXluiJSDuB6Q3Lg==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/rpc-core": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/util": "14.0.26", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/rpc-core": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-core/-/rpc-core-16.5.37.tgz", + "integrity": "sha512-waP8ieN89eKAXsUx1Y1rHn2k9snRgUJhiEfox2by9X0Unbap5GAbDG/pu1buBBxpYz4Jni4zVgdV1aoAya8vJQ==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/keyring": "14.0.26", + "@pezkuwi/rpc-augment": "16.5.37", + "@pezkuwi/rpc-provider": "16.5.37", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/util": "14.0.26", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/rpc-provider": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/rpc-provider/-/rpc-provider-16.5.37.tgz", + "integrity": "sha512-B727rg9hOBON+CwSffJCFpfKjkMbaDvEGs+HyDnUvZjU8yFp4b/WW7yax84ZL5Dv9dOm1WPDoPKDA1w1+JVqdw==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/keyring": "14.0.26", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", + "@pezkuwi/x-fetch": "14.0.26", + "@pezkuwi/x-global": "14.0.26", + "@pezkuwi/x-ws": "14.0.26", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@bizinikiwi/connect": "2.1.9" + } + }, + "node_modules/@pezkuwi/scure-sr25519": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@pezkuwi/scure-sr25519/-/scure-sr25519-0.2.1.tgz", + "integrity": "sha512-KGxCR+fI4p8QyIpwmRNIj8fbq7O+yz0iZZ/O2HJBVE7O9D6ksBKwIILqODJfE6Qvrf3F8DyT6/3cPoR3e/s8iA==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.9.2", + "@noble/hashes": "~1.8.0" + } + }, + "node_modules/@pezkuwi/types": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types/-/types-16.5.37.tgz", + "integrity": "sha512-sMNw7xJMLkv4qgGJTQkFe1oyyWVRcDxDswJFUc3P90KkKDdPlBRtJDEqG3L1MnFv5ES4c3WGTDhdUXXiKFppiA==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/keyring": "14.0.26", + "@pezkuwi/types-augment": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/types-create": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/types-augment": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-augment/-/types-augment-16.5.37.tgz", + "integrity": "sha512-JcXtBFg9p99speS5RI1Sh0SQZWlD+SO1nMkxQ3HGwzKQG842B0/UrMykkpP7hxZ6rGDDIepnX8ytqqslZXUZ2A==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/util": "14.0.26", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/types-codec": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-codec/-/types-codec-16.5.37.tgz", + "integrity": "sha512-Bu3Kq0URBDd3CskZWsKPP/jb4Q6PnFJ/R7p8RPF1P1TZQ5fhSEKbDZ8+qpkrfPHQGFDrBMnAGVTtot08cVbHiw==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-augment": "16.5.37", + "@pezkuwi/types-support": "16.5.37", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/util-crypto": "14.0.26", + "@pezkuwi/x-bigint": "14.0.26", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/types-create": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-create/-/types-create-16.5.37.tgz", + "integrity": "sha512-iViQ2wnIHWrv4OkL33eIxc9Z9eE8THZWkyEIn3a/jXnLij0H1unlzOXwcdsAe5lKhADamZDsMIBlQ5bYzsGSSg==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/util": "14.0.26", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/types-known": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-known/-/types-known-16.5.37.tgz", + "integrity": "sha512-+c1Fk3CQ0eIkv6brwfv8A64E9lSLg5XPFW4x7h5fR34PzpdfTvP7R2xcBIVlIkHd3JQUTsGP/zNXWHCi1EpHJg==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/networks": "14.0.26", + "@pezkuwi/types": "16.5.37", + "@pezkuwi/types-codec": "16.5.37", + "@pezkuwi/types-create": "16.5.37", + "@pezkuwi/util": "14.0.26", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/types-support": { + "version": "16.5.37", + "resolved": "https://registry.npmjs.org/@pezkuwi/types-support/-/types-support-16.5.37.tgz", + "integrity": "sha512-rfi7qhSysUweQEyAfe/qk26M2HZotf/xylb6gcfhWJkwiSURhW4Jof/1Rye5SSssk7nCfQcgfYUFDE+oWOHuog==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/util": "14.0.26", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/util": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/util/-/util-14.0.26.tgz", + "integrity": "sha512-xV7uct4jtIqf+9LixcCoTgYz8JEZ2eK6aosMD92Zu5DRPSW87QcCYBQuq8Phec0LdjGvC/l7DgiloQODhTtHWA==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/x-bigint": "14.0.26", + "@pezkuwi/x-global": "14.0.26", + "@pezkuwi/x-textdecoder": "14.0.26", + "@pezkuwi/x-textencoder": "14.0.26", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/util-crypto": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/util-crypto/-/util-crypto-14.0.26.tgz", + "integrity": "sha512-YR+3N2FwKx3q9NF11q75O0lJ+SKpM9CNKPE7rLEoPvFt7wpHpB/GXOAekYhNtrotkcsI8v/WoyOi4RI9NiwYVQ==", + "license": "Apache-2.0", + "dependencies": { + "@noble/curves": "^1.9.7", + "@noble/hashes": "^1.8.0", + "@pezkuwi/networks": "14.0.26", + "@pezkuwi/scure-sr25519": "^0.2.1", + "@pezkuwi/util": "14.0.26", + "@pezkuwi/wasm-crypto": "^7.5.20", + "@pezkuwi/wasm-util": "^7.5.20", + "@pezkuwi/x-bigint": "14.0.26", + "@pezkuwi/x-randomvalues": "14.0.26", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "14.0.26" + } + }, + "node_modules/@pezkuwi/wasm-bridge": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-bridge/-/wasm-bridge-7.5.20.tgz", + "integrity": "sha512-JKgDtLvQzT6uBfD8PcSD7Nud4OB8u6BJjABADDLxFrxHPsKbQNnkTd6f/27GfbkOJL4p17fWwoACICp/oEDxCw==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/wasm-util": "7.5.20", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "*", + "@pezkuwi/x-randomvalues": "*" + } + }, + "node_modules/@pezkuwi/wasm-crypto": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto/-/wasm-crypto-7.5.20.tgz", + "integrity": "sha512-7yo9CjFMiqzpWdVn8ZCT93YG4pMnmk/VzYzviSmXzzfY13wVW0M8VwwXijq5h9b3qTtaZR+F/fEPr0eUT9sO1g==", + "license": "Apache-2.0", + "dependencies": { + "@noble/hashes": "^1.3.3", + "@pezkuwi/wasm-bridge": "7.5.20", + "@pezkuwi/wasm-crypto-asmjs": "7.5.20", + "@pezkuwi/wasm-crypto-init": "7.5.20", + "@pezkuwi/wasm-crypto-wasm": "7.5.20", + "@pezkuwi/wasm-util": "7.5.20", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "*", + "@pezkuwi/x-randomvalues": "*" + } + }, + "node_modules/@pezkuwi/wasm-crypto-asmjs": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.5.20.tgz", + "integrity": "sha512-Yvd1168GjXREiOViGb+veXbEYBWEv2wS5qPZMeI7g3FeGx8pBbczvi29cTa5j/U5dmdq7ryb8rLKoXEFWG2Xkw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "*" + } + }, + "node_modules/@pezkuwi/wasm-crypto-init": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-init/-/wasm-crypto-init-7.5.20.tgz", + "integrity": "sha512-rtsGn81dvnlb1Qmlm8hPaXOlE6Cn0rrvYUirNEHLvn55D6irGEoCEuON9nNuGjamw09En8GrK3P59Y2mDkFCmw==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/wasm-bridge": "7.5.20", + "@pezkuwi/wasm-crypto-asmjs": "7.5.20", + "@pezkuwi/wasm-crypto-wasm": "7.5.20", + "@pezkuwi/wasm-util": "7.5.20", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "*", + "@pezkuwi/x-randomvalues": "*" + } + }, + "node_modules/@pezkuwi/wasm-crypto-wasm": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-crypto-wasm/-/wasm-crypto-wasm-7.5.20.tgz", + "integrity": "sha512-znId0RjOrHNTcMHtifW3IVYTJiDt/pVTjQC5MHA1KqBDuiEFHWFWKcGVe/aieXN4pvLqCZZtm4G1X80qDBHdTQ==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/wasm-util": "7.5.20", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "*" + } + }, + "node_modules/@pezkuwi/wasm-util": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/@pezkuwi/wasm-util/-/wasm-util-7.5.20.tgz", + "integrity": "sha512-bYHtbtiDdBtK/SRQMtMFGhrk4BvTe85vPqPI4CwDt8tJUmEuLgl0uHNJd9jSUcK784EQdo5E3yKYksGaHy80dQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "*" + } + }, + "node_modules/@pezkuwi/x-bigint": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-bigint/-/x-bigint-14.0.26.tgz", + "integrity": "sha512-TiCUVJiW07KurXot79AuKsqdIKGCtysMVDKLGlUc7mxlDJ+BCNJVmi9D0vvbB/gboxfJqONFQKt8eOXHKFg1iw==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/x-global": "14.0.26", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/x-fetch": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-fetch/-/x-fetch-14.0.26.tgz", + "integrity": "sha512-XVpFZ/Bk1l7dKYcC+1RMJlvQEbbyfQ/Ou4I8rTSv6MvaCtfD3vl0TxolHnhwA564eyemLfoidF/Kvbfmnz7mlg==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/x-global": "14.0.26", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/x-global": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-global/-/x-global-14.0.26.tgz", + "integrity": "sha512-3D/dgFUugJfJ59JETey2EPpWL7X7NOrSEgNj1Rt3Vu9zR74QNocc5HEcyapFKj2hNNp5gPPDOOWbrLkkDnbdXw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/x-randomvalues": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-randomvalues/-/x-randomvalues-14.0.26.tgz", + "integrity": "sha512-9tQ5+e7b5sC6y7NWFojfkfKZNSmWBpB1dnuyMv5vJMPlBPlsscTYARfk8ln860XWLdemQBYBvYbibmEBtLFfSQ==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/x-global": "14.0.26", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@pezkuwi/util": "14.0.26", + "@pezkuwi/wasm-util": "*" + } + }, + "node_modules/@pezkuwi/x-textdecoder": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-textdecoder/-/x-textdecoder-14.0.26.tgz", + "integrity": "sha512-O3l/pcT+7q89COMe+h+Gr+HLLym3k0RfWXWwEg6RYGBHxp77GfixwqAR/o6k6rBXNfxlAY60RcYUqu+DGkKSZw==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/x-global": "14.0.26", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/x-textencoder": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-textencoder/-/x-textencoder-14.0.26.tgz", + "integrity": "sha512-aUk+h0g5iO+V3CZV1vdlRy4G9MbE0SbomB5Lw/8IkuQ+wNPK9JQ1FlArMhxVBfXM9JD8DPih/ViZsaNhWfjVVw==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/x-global": "14.0.26", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@pezkuwi/x-ws": { + "version": "14.0.26", + "resolved": "https://registry.npmjs.org/@pezkuwi/x-ws/-/x-ws-14.0.26.tgz", + "integrity": "sha512-ZAvB5WgDJXSkunlZ/b2X/CJaft1eHztoWKO7SYgahk8NftAEIFet1SnWJoYL4TPvM/B9ReacNislIQXGwH0WYQ==", + "license": "Apache-2.0", + "dependencies": { + "@pezkuwi/x-global": "14.0.26", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "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==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==", + "license": "Apache-2.0" + }, + "node_modules/@types/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "26.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", + "integrity": "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==", + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/bn.js": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.5.tgz", + "integrity": "sha512-Vq886eXykuP5E6HcKSSStP3bJgrE6In5WKxVUvJ8XGpWWYs2xZHWqUwzCtGgEtBcxyd57KBFDPFoUfNzdaHCNg==", + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "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/nock": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/smoldot": { + "version": "2.0.40", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.40.tgz", + "integrity": "sha512-h6XC/kKDLdZBBTI0X8y4ZxmaZ2KYVVB0+5isCQm6j26ljeNjHZUDOV+hf8VyoE23+jg00wrxNJ2IVcIAURxwtg==", + "license": "GPL-3.0-or-later WITH Classpath-exception-2.0", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "license": "MIT" + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ws": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", + "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 + } + } + } + } +} diff --git a/payout-bot/package.json b/payout-bot/package.json new file mode 100644 index 0000000..1236f9d --- /dev/null +++ b/payout-bot/package.json @@ -0,0 +1,16 @@ +{ + "name": "pezkuwi-payout-bot", + "version": "1.0.0", + "private": true, + "description": "Payout bot: claims staking rewards for every validator in completed eras on Asset Hub", + "type": "commonjs", + "scripts": { + "start": "node bot.js" + }, + "dependencies": { + "@pezkuwi/api": "^16.5.37", + "@pezkuwi/keyring": "^14.0.26", + "@pezkuwi/util": "^14.0.26", + "@pezkuwi/util-crypto": "^14.0.26" + } +} diff --git a/scripts/bot-smoke.mjs b/scripts/bot-smoke.mjs new file mode 100644 index 0000000..62090cf --- /dev/null +++ b/scripts/bot-smoke.mjs @@ -0,0 +1,65 @@ +// Runs from a bot's directory (in its image: mounted at /app/bot-smoke.mjs) and fails unless the +// installed crypto stack is the one package-lock.json records and can sign and +// verify with every key type. A stack that only loads is not enough: the broken +// @pezkuwi/wasm-crypto 7.5.17 loaded fine and failed at ed25519 and ecdsa. +// +// node bot-smoke.mjs + +import fs from 'node:fs'; +import { createRequire } from 'node:module'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const mode = process.argv[2]; +const require = createRequire(import.meta.url); +const dir = path.dirname(fileURLToPath(import.meta.url)); +let failed = 0; + +function check (name, ok, detail = '') { + console.log(`${ok ? 'ok ' : 'FAIL'} ${name}${detail ? ` (${detail})` : ''}`); + + if (!ok) { + failed++; + } +} + +const lock = JSON.parse(fs.readFileSync(path.join(dir, 'package-lock.json'), 'utf8')); + +for (const name of ['@pezkuwi/wasm-crypto', '@pezkuwi/util-crypto', '@pezkuwi/api', '@pezkuwi/keyring']) { + const want = lock.packages[`node_modules/${name}`]?.version; + const have = JSON.parse(fs.readFileSync(path.join(dir, 'node_modules', name, 'package.json'), 'utf8')).version; + + check(`${name} is the locked version`, !!want && want === have, `lock ${want}, installed ${have}`); +} + +// Load the stack the way the bot does: the noter is an ES module, the payout +// bot is CommonJS. +const { Keyring } = mode === 'cjs' ? require('@pezkuwi/api') : await import('@pezkuwi/api'); +const { cryptoWaitReady, mnemonicGenerate } = mode === 'cjs' ? require('@pezkuwi/util-crypto') : await import('@pezkuwi/util-crypto'); + +check('crypto initialises', await cryptoWaitReady()); + +try { + check('a mnemonic can be generated', mnemonicGenerate().split(' ').length === 12); +} catch (error) { + check('a mnemonic can be generated', false, error.message); +} + +// Derived from the public development phrase, so the check needs no secret +// and does not depend on mnemonic generation working. +const message = new TextEncoder().encode('pezkuwi bot smoke'); + +for (const type of ['sr25519', 'ed25519', 'ecdsa']) { + try { + const pair = new Keyring({ type }).addFromUri('//Smoke'); + const signature = pair.sign(message); + + check(`${type} signs and verifies`, pair.verify(message, signature, pair.publicKey)); + check(`${type} rejects a tampered message`, !pair.verify(new TextEncoder().encode('tampered'), signature, pair.publicKey)); + } catch (error) { + check(`${type} signs and verifies`, false, error.message); + } +} + +console.log(failed ? `FAILED: ${failed}` : 'all bot smoke checks passed'); +process.exit(failed ? 1 : 0);