diff --git a/.github/workflows/manual_release.yml b/.github/workflows/manual_release.yml index 8165d39..eea31ca 100644 --- a/.github/workflows/manual_release.yml +++ b/.github/workflows/manual_release.yml @@ -11,9 +11,9 @@ on: description: 'Tag to build and release' required: true -env: - IMAGE_NAME: ${{ secrets.EWX_WORKER_NODE_SERVER }} - AWS_REGION: us-east-1 +# env: +# IMAGE_NAME: ${{ secrets.EWX_WORKER_NODE_SERVER }} +# AWS_REGION: us-east-1 jobs: build-and-push: @@ -24,16 +24,16 @@ jobs: uses: actions/checkout@v4 with: ref: ${{ github.event.inputs.branch }} - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - mask-aws-account-id: true - - name: Log in to ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v2 + # - name: Configure AWS credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # aws-region: us-east-1 + # mask-aws-account-id: true + # - name: Log in to ECR + # id: login-ecr + # uses: aws-actions/amazon-ecr-login@v2 - name: Log in to GitHub Container Registry uses: docker/login-action@v2 with: @@ -52,5 +52,4 @@ jobs: platforms: linux/amd64,linux/arm64 push: true tags: | - ${{ steps.login-ecr.outputs.registry }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.tag }} ghcr.io/${{ github.repository }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.tag }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 515417d..e70054b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,9 +4,9 @@ on: push: branches: ['master'] -env: - IMAGE_NAME: ${{ secrets.EWX_WORKER_NODE_SERVER }} - AWS_REGION: us-east-1 +# env: +# IMAGE_NAME: ${{ secrets.EWX_WORKER_NODE_SERVER }} +# AWS_REGION: us-east-1 jobs: cancel-previous: @@ -56,17 +56,17 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - mask-aws-account-id: true + # - name: Configure AWS credentials + # uses: aws-actions/configure-aws-credentials@v2 + # with: + # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # aws-region: us-east-1 + # mask-aws-account-id: true - - name: Log in to ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v2 + # - name: Log in to ECR + # id: login-ecr + # uses: aws-actions/amazon-ecr-login@v2 - name: Log in to GitHub Container Registry uses: docker/login-action@v2 @@ -94,5 +94,3 @@ jobs: tags: | ghcr.io/${{ github.repository }}/ewx-worker-node-server:latest ghcr.io/${{ github.repository }}/ewx-worker-node-server:${{ needs.release-module.outputs.new_version }} - ${{ steps.login-ecr.outputs.registry }}/${{ env.IMAGE_NAME }}:latest - ${{ steps.login-ecr.outputs.registry }}/${{ env.IMAGE_NAME }}:${{ needs.release-module.outputs.new_version }} diff --git a/docs/env-vars.md b/docs/env-vars.md index d0cb2d5..c8d7172 100644 --- a/docs/env-vars.md +++ b/docs/env-vars.md @@ -43,5 +43,6 @@ _Object containing the following properties:_ | `SHUTDOWN_TIMEOUT_MS` | Timeout in milliseconds for graceful shutdown (default: 30000) | `number` (_>0_) | `30000` | | `ADMIN_SERVER_PORT` | Port number for admin server (default: 3003) | `number` (_>0_) | `3003` | | `ADMIN_API_KEY` | API key for admin endpoints authentication. Must be at least 32 characters. If not set, admin endpoints will be accessible without authentication. | `string` (_min length: 32_) | | +| `VCC_PROXY_URL` | VCC proxy URL. | `string` (_url_) | `'https://ew-vcc-proxy.energyweb.org'` | _(\*) Required._ diff --git a/package-lock.json b/package-lock.json index 798a9a7..ed2a3d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@energyweb/node-red-contrib-energywebx": "0.7.2", + "@energyweb/node-red-contrib-energywebx": "0.8.1", "@energyweb/node-red-contrib-green-proof-worker": "2.5.1", "@polkadot/api": "14.0.1", "axios": "1.7.9", @@ -26,6 +26,7 @@ "pino-pretty": "13.0.0", "pino-roll": "4.0.0", "promise-retry": "2.0.1", + "snarkjs": "0.7.6", "zod": "3.25.67" }, "devDependencies": { @@ -7192,9 +7193,9 @@ } }, "node_modules/@energyweb/node-red-contrib-energywebx": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@energyweb/node-red-contrib-energywebx/-/node-red-contrib-energywebx-0.7.2.tgz", - "integrity": "sha512-ysbAREzD3K/kc9LG1IgRTwwlFZuPJzXKnNJocqCbPnmZfznYoVwPdCuBHVE+jTZ62bIIS403PmXeUCAPmlMePQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@energyweb/node-red-contrib-energywebx/-/node-red-contrib-energywebx-0.8.1.tgz", + "integrity": "sha512-FZ9eAM1NulXj2imqvPI0IaYd8VlNvshfcnTQH/R1A6ac9lHy5Dqrczlr64r8nzjThLqPzxpQ8TNw3nb075XoBg==", "license": "ISC", "dependencies": { "node-red": "^3.1.9", @@ -9554,6 +9555,22 @@ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "license": "MIT" }, + "node_modules/@iden3/bigarray": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@iden3/bigarray/-/bigarray-0.0.2.tgz", + "integrity": "sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==", + "license": "GPL-3.0" + }, + "node_modules/@iden3/binfileutils": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.12.tgz", + "integrity": "sha512-naAmzuDufRIcoNfQ1d99d7hGHufLA3wZSibtr4dMe6ZeiOPV1KwOZWTJ1YVz4HbaWlpDuzVU72dS4ATQS4PXBQ==", + "license": "GPL-3.0", + "dependencies": { + "fastfile": "0.0.20", + "ffjavascript": "^0.3.0" + } + }, "node_modules/@ioredis/commands": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.7.0.tgz", @@ -27344,6 +27361,22 @@ "prebuild-install": "^7.1.1" } }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/big-integer": { "version": "1.6.52", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", @@ -28053,6 +28086,12 @@ "node": "*" } }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", + "license": "MIT" + }, "node_modules/cheerio": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", @@ -28230,6 +28269,18 @@ "node": ">= 10" } }, + "node_modules/circom_runtime": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.28.tgz", + "integrity": "sha512-ACagpQ7zBRLKDl5xRZ4KpmYIcZDUjOiNRuxvXLqhnnlLSVY1Dbvh73TI853nqoR0oEbihtWmMSjgc5f+pXf/jQ==", + "license": "Apache-2.0", + "dependencies": { + "ffjavascript": "0.3.1" + }, + "bin": { + "calcwit": "calcwit.js" + } + }, "node_modules/cjs-module-lexer": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", @@ -29579,10 +29630,11 @@ } }, "node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", + "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", "license": "BSD-3-Clause", + "optional": true, "peer": true, "engines": { "node": ">=0.3.1" @@ -29813,6 +29865,21 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", @@ -30210,6 +30277,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", @@ -30870,7 +30958,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -30880,7 +30967,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -31511,6 +31597,12 @@ "node": ">= 4.9.1" } }, + "node_modules/fastfile": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/fastfile/-/fastfile-0.0.20.tgz", + "integrity": "sha512-r5ZDbgImvVWCP0lA/cGNgQcZqR+aYdFx3u+CtJqUE510pBUVGMn4ulL/iRTI4tACTYsNJ736uzFxEBXesPAktA==", + "license": "GPL-3.0" + }, "node_modules/fastq": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", @@ -31558,6 +31650,17 @@ "node": ">= 8" } }, + "node_modules/ffjavascript": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.3.1.tgz", + "integrity": "sha512-4PbK1WYodQtuF47D4pRI5KUg3Q392vuP5WjE1THSnceHdXwU3ijaoS0OqxTzLknCtz4Z2TtABzkBdBdMn3B/Aw==", + "license": "GPL-3.0", + "dependencies": { + "wasmbuilder": "0.0.16", + "wasmcurves": "0.2.2", + "web-worker": "1.2.0" + } + }, "node_modules/fflate": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", @@ -31617,6 +31720,27 @@ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "license": "MIT" }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -33258,6 +33382,15 @@ "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", "license": "MIT" }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/hpagent": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", @@ -34659,6 +34792,29 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, "node_modules/jiti": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", @@ -34973,6 +35129,35 @@ ], "license": "MIT" }, + "node_modules/jsonpath": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.3.0.tgz", + "integrity": "sha512-0kjkYHJBkAy50Z5QzArZ7udmvxrJzkpKYW27fiF//BrMY7TQibYLl+FYIXN2BiYmwMIVzSfD8aDRj6IzgBX2/w==", + "license": "MIT", + "dependencies": { + "esprima": "1.2.5", + "static-eval": "2.1.1", + "underscore": "1.13.6" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz", + "integrity": "sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpath/node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "license": "MIT" + }, "node_modules/jsonpointer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", @@ -37039,6 +37224,12 @@ "url": "https://tidelift.com/funding/github/npm/loglevel" } }, + "node_modules/logplease": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/logplease/-/logplease-1.2.15.tgz", + "integrity": "sha512-jLlHnlsPSJjpwUfcNyUxXCl33AYg2cHhIf9QhGL2T4iPT0XPB+xP1LRKFPgIg1M/sg9kAJvy94w9CzBNrfnstA==", + "license": "MIT" + }, "node_modules/long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", @@ -42728,6 +42919,29 @@ "integrity": "sha512-QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg==", "license": "MIT" }, + "node_modules/r1csfile": { + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.48.tgz", + "integrity": "sha512-kHRkKUJNaor31l05f2+RFzvcH5XSa7OfEfd/l4hzjte6NL6fjRkSMfZ4BjySW9wmfdwPOtq3mXurzPvPGEf5Tw==", + "license": "GPL-3.0", + "dependencies": { + "@iden3/bigarray": "0.0.2", + "@iden3/binfileutils": "0.0.12", + "fastfile": "0.0.20", + "ffjavascript": "0.3.0" + } + }, + "node_modules/r1csfile/node_modules/ffjavascript": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.3.0.tgz", + "integrity": "sha512-l7sR5kmU3gRwDy8g0Z2tYBXy5ttmafRPFOqY7S6af5cq51JqJWt5eQ/lSR/rs2wQNbDYaYlQr5O+OSUf/oMLoQ==", + "license": "GPL-3.0", + "dependencies": { + "wasmbuilder": "0.0.16", + "wasmcurves": "0.2.2", + "web-worker": "1.2.0" + } + }, "node_modules/radash": { "version": "12.1.1", "resolved": "https://registry.npmjs.org/radash/-/radash-12.1.1.tgz", @@ -44431,6 +44645,26 @@ "integrity": "sha512-u5iEEXkMe2EInQio6Wv9LWHOQYRDbD2O9hzS27GpT/lwfIQhTCnHCTqedqHIHe9ZcvQo+9au6vngQayipz1NYw==", "license": "MIT" }, + "node_modules/snarkjs": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/snarkjs/-/snarkjs-0.7.6.tgz", + "integrity": "sha512-4uH1xA5JzVU5jaaWS2fXej3+RC6L5Erhr6INTJtUA27du4Elbh4VXCeeRjB4QiwL6N6y7SNKePw5prTxyEf4Zg==", + "license": "GPL-3.0", + "dependencies": { + "@iden3/binfileutils": "0.0.12", + "@noble/hashes": "^1.7.1", + "bfj": "^7.0.2", + "circom_runtime": "0.1.28", + "ejs": "^3.1.6", + "fastfile": "0.0.20", + "ffjavascript": "0.3.1", + "logplease": "^1.2.15", + "r1csfile": "0.0.48" + }, + "bin": { + "snarkjs": "build/cli.cjs" + } + }, "node_modules/snowflake-sdk": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/snowflake-sdk/-/snowflake-sdk-2.1.0.tgz", @@ -44829,6 +45063,15 @@ "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", "license": "MIT" }, + "node_modules/static-eval": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", + "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "license": "MIT", + "dependencies": { + "escodegen": "^2.1.0" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -45999,6 +46242,12 @@ "node": ">= 14.0.0" } }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "license": "MIT" + }, "node_modules/ts-algebra": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", @@ -46082,6 +46331,16 @@ } } }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/ts-toolbelt": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", @@ -46689,6 +46948,21 @@ "node": ">=18" } }, + "node_modules/wasmbuilder": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", + "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==", + "license": "GPL-3.0" + }, + "node_modules/wasmcurves": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.2.2.tgz", + "integrity": "sha512-JRY908NkmKjFl4ytnTu5ED6AwPD+8VJ9oc94kdq7h5bIwbj0L4TDJ69mG+2aLs2SoCmGfqIesMWTEJjtYsoQXQ==", + "license": "GPL-3.0", + "dependencies": { + "wasmbuilder": "0.0.16" + } + }, "node_modules/weaviate-client": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/weaviate-client/-/weaviate-client-3.9.0.tgz", @@ -46730,6 +47004,12 @@ "node": ">= 14" } }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "license": "Apache-2.0" + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/package.json b/package.json index a378387..ae1244f 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "zod": "3.25.67" }, "dependencies": { - "@energyweb/node-red-contrib-energywebx": "0.7.2", + "@energyweb/node-red-contrib-energywebx": "0.8.1", "@energyweb/node-red-contrib-green-proof-worker": "2.5.1", "@polkadot/api": "14.0.1", "axios": "1.7.9", @@ -42,7 +42,8 @@ "pino-pretty": "13.0.0", "pino-roll": "4.0.0", "promise-retry": "2.0.1", - "zod": "3.25.67" + "zod": "3.25.67", + "snarkjs": "0.7.6" }, "devDependencies": { "@commitlint/cli": "19.7.1", diff --git a/src/config.ts b/src/config.ts index 763e9f1..955f3ae 100644 --- a/src/config.ts +++ b/src/config.ts @@ -189,6 +189,11 @@ export const ENV_SCHEMA = z.object({ .describe( 'API key for admin endpoints authentication. Must be at least 32 characters. If not set, admin endpoints will be accessible without authentication.', ), + VCC_PROXY_URL: z + .string() + .url() + .default('https://ew-vcc-proxy.energyweb.org') + .describe('VCC proxy URL.'), }); export const MAIN_CONFIG: z.infer = (process.env.__SKIP_PARSE_CONFIG === 'true' diff --git a/src/node-red/red.ts b/src/node-red/red.ts index 82c33fa..7df9450 100644 --- a/src/node-red/red.ts +++ b/src/node-red/red.ts @@ -26,7 +26,8 @@ type EWX_ENVS = | 'EWX_RPC_URL' | 'BASE_URL' | 'EWX_SQLITE_PATH' - | 'EWX_WORKER_ADDRESS'; + | 'EWX_WORKER_ADDRESS' + | 'VCC_PROXY_URL'; const redLogger = createLogger('NodeRed'); @@ -96,6 +97,10 @@ export const startRedServer = async (app: express.Express): Promise const functionGlobalContext = { rpcUrl: MAIN_CONFIG.PALLET_RPC_URL, + snarkjs: require('snarkjs'), + http: require('http'), + https: require('https'), + crypto: require('crypto'), }; rmSync(MAIN_CONFIG.RED_DIRECTORY, { @@ -537,6 +542,11 @@ export const modifyFlowIds = ( name: 'EWX_RPC_URL', value: rpcUrl, }, + { + type: 'str', + name: 'VCC_PROXY_URL', + value: MAIN_CONFIG.VCC_PROXY_URL, + }, ]; parsedFlow.env = flowEwxEnvs; @@ -548,35 +558,32 @@ export const modifyFlowIds = ( parsedFlow.configs = []; } + const ewxEnvConfig = { + EWX_SOLUTION_ID: solutionId, + EWX_SOLUTION_GROUP_ID: solutionGroupId, + EWX_WORKLOGIC_ID: workLogic, + EWX_SQLITE_PATH: sqlitePath, + EWX_WORKER_ADDRESS: workerAddress, + EWX_RPC_URL: MAIN_CONFIG.PALLET_RPC_URL, + BASE_URL: MAIN_CONFIG.BASE_URLS, + VCC_PROXY_URL: MAIN_CONFIG.VCC_PROXY_URL, + }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any parsedFlow.configs = parsedFlow.configs.map((configContent: any) => { return { ...configContent, - __envConfig: { - EWX_SOLUTION_ID: solutionId, - EWX_SOLUTION_GROUP_ID: solutionGroupId, - EWX_WORKLOGIC_ID: workLogic, - EWX_SQLITE_PATH: sqlitePath, - EWX_WORKER_ADDRESS: workerAddress, - EWX_RPC_URL: MAIN_CONFIG.PALLET_RPC_URL, - BASE_URL: MAIN_CONFIG.BASE_URLS, - }, + __envConfig: ewxEnvConfig, }; }); parsedFlow.nodes = parsedFlow.nodes.map((nodeContent: any) => { - return { + const node = { ...nodeContent, - __envConfig: { - EWX_SOLUTION_ID: solutionId, - EWX_SOLUTION_GROUP_ID: solutionGroupId, - EWX_WORKLOGIC_ID: workLogic, - EWX_SQLITE_PATH: sqlitePath, - EWX_WORKER_ADDRESS: workerAddress, - EWX_RPC_URL: MAIN_CONFIG.PALLET_RPC_URL, - BASE_URL: MAIN_CONFIG.BASE_URLS, - }, + __envConfig: ewxEnvConfig, }; + + return node; }); const uniqueIds = new Set(parsedFlow.nodes.map((f) => f.id));