diff --git a/.github/workflows/cache.yml b/.github/workflows/cache.yml index 3ce56524c4..d20db5d679 100644 --- a/.github/workflows/cache.yml +++ b/.github/workflows/cache.yml @@ -96,16 +96,13 @@ jobs: - name: Cleanup npm caches if: always() run: | - set -euxo pipefail # stop on errors, print commands, fail on pipe fails - # remove all but the latest cache, leaving only the cache we just saved - set +e; gh extension install actions/gh-actions-cache; set -e echo "Fetching list of cache key" - cacheKeys=$(gh actions-cache list --sort created-at --order desc --limit 100 -R "${{ github.repository }}" --key "npm-${{ runner.os }}-${{ runner.arch }}-" | cut -f 1 | tail -n +3) + cacheKeys=$(gh cache list --sort created_at --order desc --limit 100 -R "${{ github.repository }}" --key "npm-${{ runner.os }}-${{ runner.arch }}-" | cut -f 1 | tail -n +3) echo caches to be removed: echo "${cacheKeys}" set +e for cacheKey in $cacheKeys do - gh actions-cache delete "$cacheKey" -R "${{ github.repository }}" --confirm + gh cache delete "$cacheKey" -R "${{ github.repository }}" done diff --git a/demos/client-bundle-example/package.json b/demos/client-bundle-example/package.json index 6fc1223730..efc142cc41 100644 --- a/demos/client-bundle-example/package.json +++ b/demos/client-bundle-example/package.json @@ -13,9 +13,9 @@ "start": "vite serve ./src --port 9232 --config vite.config.ts", "clean": "echo 'nothing to clean'" }, - "version": "2.2.3", + "version": "2.3.0", "devDependencies": { - "@prosopo/dotenv": "2.2.3", + "@prosopo/dotenv": "2.3.0", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", diff --git a/demos/client-example-server/package.json b/demos/client-example-server/package.json index 8731bbde03..15978121b8 100644 --- a/demos/client-example-server/package.json +++ b/demos/client-example-server/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/client-example-server", - "version": "2.2.3", + "version": "2.3.0", "description": "Backend for client-example", "main": "dist/app.js", "type": "module", @@ -32,12 +32,12 @@ "@noble/hashes": "1.5.0", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", + "@prosopo/common": "2.3.0", "@prosopo/contract": "2.2.3", - "@prosopo/dotenv": "2.2.3", - "@prosopo/server": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/dotenv": "2.3.0", + "@prosopo/server": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "@typegoose/auto-increment": "4.6.0", "cors": "2.8.5", "express": "4.21.1", @@ -47,7 +47,7 @@ "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/jsonwebtoken": "9.0.6", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", diff --git a/demos/client-example-server/src/controllers/auth.ts b/demos/client-example-server/src/controllers/auth.ts index e6fb40bcbe..24c4c115b6 100644 --- a/demos/client-example-server/src/controllers/auth.ts +++ b/demos/client-example-server/src/controllers/auth.ts @@ -16,7 +16,7 @@ import { blake2b } from "@noble/hashes/blake2b"; import { u8aToHex } from "@polkadot/util"; import { randomAsHex } from "@polkadot/util-crypto"; import { ProsopoEnvError } from "@prosopo/common"; -import { getPairAsync } from "@prosopo/contract"; +import { getPairAsync } from "@prosopo/keyring"; import { ProsopoServer } from "@prosopo/server"; import { ApiParams, diff --git a/demos/client-example-server/tsconfig.json b/demos/client-example-server/tsconfig.json index b22c35ed6f..4e8df87c01 100644 --- a/demos/client-example-server/tsconfig.json +++ b/demos/client-example-server/tsconfig.json @@ -10,9 +10,6 @@ { "path": "../../packages/common" }, - { - "path": "../../packages/contract" - }, { "path": "../../packages/dotenv" }, diff --git a/demos/client-example/package.json b/demos/client-example/package.json index a6d2167229..2d2506eb31 100644 --- a/demos/client-example/package.json +++ b/demos/client-example/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/client-example", - "version": "2.2.3", + "version": "2.3.0", "private": true, "type": "module", "engines": { @@ -13,14 +13,14 @@ "@mui/material": "5.9.1", "@polkadot/extension-dapp": "0.46.9", "@polkadot/extension-inject": "0.46.9", - "@prosopo/common": "2.2.3", - "@prosopo/locale-browser": "2.2.3", - "@prosopo/procaptcha-frictionless": "2.2.3", - "@prosopo/procaptcha-pow": "2.2.3", - "@prosopo/procaptcha-react": "2.2.3", - "@prosopo/server": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/vite-plugin-watch-workspace": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/locale-browser": "2.3.0", + "@prosopo/procaptcha-frictionless": "2.3.0", + "@prosopo/procaptcha-pow": "2.3.0", + "@prosopo/procaptcha-react": "2.3.0", + "@prosopo/server": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/vite-plugin-watch-workspace": "2.3.0", "@types/react-dom": "18.3.0", "@vitejs/plugin-react": "4.3.1", "express": "4.21.1", @@ -41,8 +41,8 @@ } }, "devDependencies": { - "@prosopo/config": "2.2.3", - "@prosopo/dotenv": "2.2.3", + "@prosopo/config": "2.3.0", + "@prosopo/dotenv": "2.3.0", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", diff --git a/demos/cypress-shared/cypress/e2e/captcha.cy.ts b/demos/cypress-shared/cypress/e2e/captcha.cy.ts index 961bbacc61..735dfa8113 100644 --- a/demos/cypress-shared/cypress/e2e/captcha.cy.ts +++ b/demos/cypress-shared/cypress/e2e/captcha.cy.ts @@ -15,8 +15,8 @@ import "@cypress/xpath"; import { u8aToHex } from "@polkadot/util"; import { ProsopoDatasetError } from "@prosopo/common"; -import { getPairAsync } from "@prosopo/contract"; import { datasetWithSolutionHashes } from "@prosopo/datasets"; +import { getPairAsync } from "@prosopo/keyring"; import { AdminApiPaths, type Captcha, diff --git a/demos/cypress-shared/cypress/e2e/correct.captcha.cy.ts b/demos/cypress-shared/cypress/e2e/correct.captcha.cy.ts index adcd0452a2..59b8ad2064 100644 --- a/demos/cypress-shared/cypress/e2e/correct.captcha.cy.ts +++ b/demos/cypress-shared/cypress/e2e/correct.captcha.cy.ts @@ -15,8 +15,8 @@ import "@cypress/xpath"; import { u8aToHex } from "@polkadot/util"; import { ProsopoDatasetError } from "@prosopo/common"; -import { getPairAsync } from "@prosopo/contract"; import { datasetWithSolutionHashes } from "@prosopo/datasets"; +import { getPairAsync } from "@prosopo/keyring"; import { AdminApiPaths, type Captcha, diff --git a/demos/cypress-shared/cypress/e2e/correct.captcha.signup.cy.ts b/demos/cypress-shared/cypress/e2e/correct.captcha.signup.cy.ts index 520513e730..a4f6e27292 100644 --- a/demos/cypress-shared/cypress/e2e/correct.captcha.signup.cy.ts +++ b/demos/cypress-shared/cypress/e2e/correct.captcha.signup.cy.ts @@ -15,8 +15,8 @@ import "@cypress/xpath"; import { u8aToHex } from "@polkadot/util"; import { ProsopoDatasetError } from "@prosopo/common"; -import { getPairAsync } from "@prosopo/contract"; import { datasetWithSolutionHashes } from "@prosopo/datasets"; +import { getPairAsync } from "@prosopo/keyring"; import { AdminApiPaths, type Captcha, diff --git a/demos/cypress-shared/package.json b/demos/cypress-shared/package.json index bbd4161e20..b60fe5172e 100644 --- a/demos/cypress-shared/package.json +++ b/demos/cypress-shared/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/cypress-shared", - "version": "2.2.3", + "version": "2.3.0", "private": true, "type": "module", "engines": { @@ -8,15 +8,15 @@ "npm": ">=9" }, "dependencies": { - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1" }, "devDependencies": { "@cypress/xpath": "2.0.3", - "@prosopo/common": "2.2.3", - "@prosopo/datasets": "2.2.3", - "@prosopo/types-database": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/datasets": "2.3.0", + "@prosopo/types-database": "2.3.0", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", diff --git a/demos/provider-mock/package.json b/demos/provider-mock/package.json index 563e12a634..ac3adf69f3 100644 --- a/demos/provider-mock/package.json +++ b/demos/provider-mock/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/provider-mock", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "main": "./dist/index.js", @@ -16,9 +16,9 @@ "build:cjs": "echo 'no cjs build'" }, "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/provider": "2.2.3", - "@prosopo/types": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/provider": "2.3.0", + "@prosopo/types": "2.3.0", "cors": "2.8.5", "express": "4.21.1" }, diff --git a/dev/config/package.json b/dev/config/package.json index 20d787eba0..2a6f8127de 100644 --- a/dev/config/package.json +++ b/dev/config/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/config", - "version": "2.2.3", + "version": "2.3.0", "description": "Prosopo config library", "main": "./dist/index.js", "type": "module", @@ -36,9 +36,9 @@ "@babel/plugin-transform-react-jsx": "7.25.2", "@babel/plugin-transform-runtime": "7.25.4", "@babel/preset-env": "7.25.4", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "@rollup/plugin-alias": "5.1.0", "@rollup/plugin-babel": "6.0.4", "@rollup/plugin-commonjs": "26.0.1", diff --git a/dev/config/src/projectInfo.ts b/dev/config/src/projectInfo.ts index cffd4bec9f..6ad75aea2d 100644 --- a/dev/config/src/projectInfo.ts +++ b/dev/config/src/projectInfo.ts @@ -57,8 +57,6 @@ export const getCliPkgDir = () => `${getPackagesDir()}/cli`; export const getCommonPkgDir = () => `${getPackagesDir()}/common`; -export const getContractPkgDir = () => `${getPackagesDir()}/contract`; - export const getDatabasePkgDir = () => `${getPackagesDir()}/database`; export const getDatasetsPkgDir = () => `${getPackagesDir()}/datasets`; @@ -92,8 +90,6 @@ export const getProviderPkgDir = () => `${getPackagesDir()}/provider`; export const getServerPkgDir = () => `${getPackagesDir()}/server`; -export const getTxPkgDir = () => `${getPackagesDir()}/tx`; - export const getTypesPkgDir = () => `${getPackagesDir()}/types`; export const getTypesDatabasePkgDir = () => diff --git a/dev/flux/package.json b/dev/flux/package.json index 4b554f0d60..7a805dae03 100644 --- a/dev/flux/package.json +++ b/dev/flux/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/flux", - "version": "2.2.3", + "version": "2.3.0", "description": "Tools for managing Flux deployment", "main": "dist/index.js", "bin": { @@ -24,10 +24,10 @@ "@noble/curves": "1.6.0", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/dotenv": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/dotenv": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1", "openpgp": "5.11.2", "qs": "6.13.0", diff --git a/dev/gh-actions/package.json b/dev/gh-actions/package.json index 669dcb391f..346e87a48a 100644 --- a/dev/gh-actions/package.json +++ b/dev/gh-actions/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/gh-actions", - "version": "2.2.3", + "version": "2.3.0", "description": "", "private": true, "scripts": { diff --git a/dev/lint/package.json b/dev/lint/package.json index 505815f951..3b440696fb 100644 --- a/dev/lint/package.json +++ b/dev/lint/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/lint", - "version": "2.2.3", + "version": "2.3.0", "description": "", "private": true, "scripts": { @@ -37,7 +37,7 @@ "npm": ">=9" }, "dependencies": { - "@prosopo/util": "2.2.3", + "@prosopo/util": "2.3.0", "express": "4.21.1", "fast-glob": "3.3.2", "zod": "3.23.8" diff --git a/dev/prosoponator-bot/package.json b/dev/prosoponator-bot/package.json index 5c0cd440cc..53d5f7fee1 100644 --- a/dev/prosoponator-bot/package.json +++ b/dev/prosoponator-bot/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/prosoponator-bot", - "version": "2.2.3", + "version": "2.3.0", "description": "", "private": true, "scripts": { diff --git a/dev/scripts/env.development b/dev/scripts/env.development index 121709de85..e3b8fe8127 100644 --- a/dev/scripts/env.development +++ b/dev/scripts/env.development @@ -18,7 +18,7 @@ PROSOPO_DEFAULT_ENVIRONMENT=development PROSOPO_LOG_LEVEL=debug PROSOPO_MONGO_CAPTCHA_URI= PROSOPO_MONGO_EVENTS_URI=mongodb+srv:///frictionless_events -PROSOPO_PACKAGE_VERSION=2.2.3 +PROSOPO_PACKAGE_VERSION=2.3.0 PROSOPO_PROVIDER_ACCOUNT_PASSWORD= PROSOPO_PROVIDER_ADDRESS=5EjTA28bKSbFPPyMbUjNtArxyqjwq38r1BapVmLZShaqEedV PROSOPO_PROVIDER_JSON= diff --git a/dev/scripts/env.production b/dev/scripts/env.production index 3d1478b4a5..4fb86219be 100644 --- a/dev/scripts/env.production +++ b/dev/scripts/env.production @@ -16,7 +16,7 @@ PROSOPO_DEFAULT_ENVIRONMENT=production PROSOPO_LOG_LEVEL=info PROSOPO_MONGO_CAPTCHA_URI= PROSOPO_MONGO_EVENTS_URI=mongodb+srv:///frictionless_events -PROSOPO_PACKAGE_VERSION=2.2.3 +PROSOPO_PACKAGE_VERSION=2.3.0 PROSOPO_PROVIDER_ACCOUNT_PASSWORD= PROSOPO_PROVIDER_ADDRESS= PROSOPO_PROVIDER_JSON= diff --git a/dev/scripts/env.staging b/dev/scripts/env.staging index 87d3258012..8bcc290163 100644 --- a/dev/scripts/env.staging +++ b/dev/scripts/env.staging @@ -21,7 +21,7 @@ PROSOPO_DEFAULT_ENVIRONMENT=staging PROSOPO_LOG_LEVEL=info PROSOPO_MONGO_CAPTCHA_URI= PROSOPO_MONGO_EVENTS_URI=mongodb+srv:///frictionless_events -PROSOPO_PACKAGE_VERSION=2.2.3 +PROSOPO_PACKAGE_VERSION=2.3.0 PROSOPO_PROVIDER_ACCOUNT_PASSWORD= PROSOPO_PROVIDER_ADDRESS= PROSOPO_PROVIDER_JSON= diff --git a/dev/scripts/env.test b/dev/scripts/env.test index 38f6d470e5..a45d074913 100644 --- a/dev/scripts/env.test +++ b/dev/scripts/env.test @@ -21,7 +21,7 @@ PROSOPO_DEFAULT_ENVIRONMENT=development PROSOPO_LOG_LEVEL=info PROSOPO_MONGO_CAPTCHA_URI=mongodb://root:root@localhost:27017/captchastorage?authSource=admin PROSOPO_MONGO_EVENTS_URI=mongodb+srv:///frictionless_events -PROSOPO_PACKAGE_VERSION=2.2.3 +PROSOPO_PACKAGE_VERSION=2.3.0 PROSOPO_PROVIDER_ACCOUNT_PASSWORD= PROSOPO_PROVIDER_ADDRESS=5EjTA28bKSbFPPyMbUjNtArxyqjwq38r1BapVmLZShaqEedV PROSOPO_PROVIDER_JSON= diff --git a/dev/scripts/package.json b/dev/scripts/package.json index c07bf3e8c1..faad531de7 100644 --- a/dev/scripts/package.json +++ b/dev/scripts/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/scripts", - "version": "2.2.3", + "version": "2.3.0", "description": "Dev scripts for working with prosopo packages", "main": "dist/index.js", "type": "module", @@ -26,18 +26,19 @@ "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/cli": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/contract": "2.2.3", - "@prosopo/datasets": "2.2.3", - "@prosopo/dotenv": "2.2.3", - "@prosopo/env": "2.2.3", - "@prosopo/provider": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", - "@prosopo/types-env": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/account": "2.3.0", + "@prosopo/cli": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/datasets": "2.3.0", + "@prosopo/dotenv": "2.3.0", + "@prosopo/env": "2.3.0", + "@prosopo/keyring": "2.3.0", + "@prosopo/provider": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", + "@prosopo/types-env": "2.3.0", + "@prosopo/util": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1", "fast-glob": "3.3.2", diff --git a/dev/scripts/src/scripts/generateMnemonic.ts b/dev/scripts/src/scripts/generateMnemonic.ts index 281f1ded9c..2de7851146 100644 --- a/dev/scripts/src/scripts/generateMnemonic.ts +++ b/dev/scripts/src/scripts/generateMnemonic.ts @@ -13,8 +13,8 @@ // limitations under the License. import { LogLevel, getLogger } from "@prosopo/common"; -import { generateMnemonic } from "@prosopo/contract"; import { loadEnv } from "@prosopo/dotenv"; +import { generateMnemonic } from "@prosopo/keyring"; import { updateEnvFile } from "../setup/index.js"; loadEnv(); diff --git a/dev/scripts/src/scripts/sign.ts b/dev/scripts/src/scripts/sign.ts index 3affabcd59..d1d0984e14 100644 --- a/dev/scripts/src/scripts/sign.ts +++ b/dev/scripts/src/scripts/sign.ts @@ -13,7 +13,7 @@ import { stringToU8a, u8aToHex } from "@polkadot/util"; // See the License for the specific language governing permissions and // limitations under the License. import type { KeypairType } from "@polkadot/util-crypto/types"; -import { getPairAsync } from "@prosopo/contract"; +import { getPairAsync } from "@prosopo/keyring"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; diff --git a/dev/scripts/src/setup/setup.ts b/dev/scripts/src/setup/setup.ts index baddb8085c..f5c8deb1bc 100644 --- a/dev/scripts/src/setup/setup.ts +++ b/dev/scripts/src/setup/setup.ts @@ -16,9 +16,9 @@ import path from "node:path"; import { BN } from "@polkadot/util"; import { defaultConfig, getSecret } from "@prosopo/cli"; import { LogLevel, ProsopoEnvError, getLogger } from "@prosopo/common"; -import { generateMnemonic, getPairAsync } from "@prosopo/contract"; import { getEnvFile } from "@prosopo/dotenv"; import { ProviderEnvironment } from "@prosopo/env"; +import { generateMnemonic, getPairAsync } from "@prosopo/keyring"; import { type IDappAccount, type IProviderAccount, diff --git a/dev/scripts/tsconfig.json b/dev/scripts/tsconfig.json index a9d75206c4..ed776aabd5 100644 --- a/dev/scripts/tsconfig.json +++ b/dev/scripts/tsconfig.json @@ -8,13 +8,13 @@ "include": ["src", "src/**/*.json"], "references": [ { - "path": "../../packages/cli" + "path": "../../packages/account" }, { - "path": "../../packages/common" + "path": "../../packages/cli" }, { - "path": "../../packages/contract" + "path": "../../packages/common" }, { "path": "../../packages/datasets" @@ -25,6 +25,9 @@ { "path": "../../packages/env" }, + { + "path": "../../packages/keyring" + }, { "path": "../../packages/provider" }, diff --git a/dev/ts-brand/package.json b/dev/ts-brand/package.json index ca2a8a8539..13a8da37d5 100644 --- a/dev/ts-brand/package.json +++ b/dev/ts-brand/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/ts-brand", - "version": "2.2.3", + "version": "2.3.0", "description": "Brand your TypeScript types", "main": "./dist/index.js", "type": "module", @@ -24,7 +24,7 @@ "author": "Prosopo Limited", "license": "Apache-2.0", "dependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1" }, diff --git a/dev/vite-plugin-watch-workspace/package.json b/dev/vite-plugin-watch-workspace/package.json index 2fc572cf8a..ab7e5cd4f9 100644 --- a/dev/vite-plugin-watch-workspace/package.json +++ b/dev/vite-plugin-watch-workspace/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/vite-plugin-watch-workspace", - "version": "2.2.3", + "version": "2.3.0", "description": "Vite plugin for watching and rebuilding external files", "main": "./dist/index.js", "type": "module", @@ -23,7 +23,7 @@ "author": "Prosopo Limited", "license": "Apache-2.0", "dependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "debug": "4.3.7", "esbuild": "0.23.1", "express": "4.21.1", diff --git a/docker/docker-compose.provider.yml b/docker/docker-compose.provider.yml index d2fc8bf33a..17bf70d95e 100644 --- a/docker/docker-compose.provider.yml +++ b/docker/docker-compose.provider.yml @@ -55,10 +55,6 @@ services: retries: 3 start_period: 30s timeout: 10s - dns: - - 8.8.8.8 - - 1.1.1.1 - - 208.67.222.222 database-dev: container_name: database profiles: @@ -208,6 +204,15 @@ networks: gateway: 172.18.0.1 external: name: external + driver: bridge + ipam: + config: + - subnet: 172.19.0.0/16 + gateway: 172.19.0.1 + dns: + - 8.8.8.8 + - 1.1.1.1 + - 208.67.222.222 volumes: caddy_data: caddy_config: diff --git a/docker/images/provider/package.json b/docker/images/provider/package.json index 57a9d27f2a..203279c279 100644 --- a/docker/images/provider/package.json +++ b/docker/images/provider/package.json @@ -5,5 +5,5 @@ "node": "20", "npm": ">=9" }, - "version": "2.2.3" + "version": "2.3.0" } diff --git a/docker/images/vector/vector.toml b/docker/images/vector/vector.toml index 8dd82b690c..822067e54c 100644 --- a/docker/images/vector/vector.toml +++ b/docker/images/vector/vector.toml @@ -41,6 +41,9 @@ compression = "gzip" encoding.codec = "json" encoding.timestamp_format = "rfc3339" healthcheck.enabled = false +batch.timeout_secs = 10 # time to wait before sending a batch +batch.max_bytes = 10485760 # 10mb, max number of bytes per batch +batch.max_events = 100000 # max number of events per batch # listen to docker events for containers starting+ending [sources.docker] @@ -100,6 +103,9 @@ compression = "gzip" encoding.codec = "json" encoding.timestamp_format = "rfc3339" healthcheck.enabled = false +batch.timeout_secs = 10 # time to wait before sending a batch +batch.max_bytes = 10485760 # 10mb, max number of bytes per batch +batch.max_events = 100000 # max number of events per batch [sources.caddy] type = "docker_logs" @@ -135,6 +141,9 @@ compression = "gzip" encoding.codec = "json" encoding.timestamp_format = "rfc3339" healthcheck.enabled = false +batch.timeout_secs = 10 # time to wait before sending a batch +batch.max_bytes = 10485760 # 10mb, max number of bytes per batch +batch.max_events = 100000 # max number of events per batch [sources.watchtower] type = "docker_logs" @@ -163,3 +172,6 @@ compression = "gzip" encoding.codec = "json" encoding.timestamp_format = "rfc3339" healthcheck.enabled = false +batch.timeout_secs = 10 # time to wait before sending a batch +batch.max_bytes = 10485760 # 10mb, max number of bytes per batch +batch.max_events = 100000 # max number of events per batch diff --git a/package-lock.json b/package-lock.json index 748d4c131d..055135bd58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@prosopo/captcha", - "version": "2.2.3", + "version": "2.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@prosopo/captcha", - "version": "2.2.3", + "version": "2.3.0", "hasInstallScript": true, "license": "Apache-2.0", "workspaces": [ @@ -43,12 +43,12 @@ }, "demos/client-bundle-example": { "name": "@prosopo/client-bundle-example", - "version": "2.2.3", + "version": "2.3.0", "dependencies": { "express": "4.21.1" }, "devDependencies": { - "@prosopo/dotenv": "2.2.3", + "@prosopo/dotenv": "2.3.0", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", @@ -67,21 +67,21 @@ }, "demos/client-example": { "name": "@prosopo/client-example", - "version": "2.2.3", + "version": "2.3.0", "dependencies": { "@emotion/react": "11.13.3", "@emotion/styled": "11.13.0", "@mui/material": "5.9.1", "@polkadot/extension-dapp": "0.46.9", "@polkadot/extension-inject": "0.46.9", - "@prosopo/common": "2.2.3", - "@prosopo/locale-browser": "2.2.3", - "@prosopo/procaptcha-frictionless": "2.2.3", - "@prosopo/procaptcha-pow": "2.2.3", - "@prosopo/procaptcha-react": "2.2.3", - "@prosopo/server": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/vite-plugin-watch-workspace": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/locale-browser": "2.3.0", + "@prosopo/procaptcha-frictionless": "2.3.0", + "@prosopo/procaptcha-pow": "2.3.0", + "@prosopo/procaptcha-react": "2.3.0", + "@prosopo/server": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/vite-plugin-watch-workspace": "2.3.0", "@types/react-dom": "18.3.0", "@vitejs/plugin-react": "4.3.1", "express": "4.21.1", @@ -90,8 +90,8 @@ "react-router-dom": "6.26.2" }, "devDependencies": { - "@prosopo/config": "2.2.3", - "@prosopo/dotenv": "2.2.3", + "@prosopo/config": "2.3.0", + "@prosopo/dotenv": "2.3.0", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", @@ -110,18 +110,18 @@ }, "demos/client-example-server": { "name": "@prosopo/client-example-server", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@noble/hashes": "1.5.0", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", + "@prosopo/common": "2.3.0", "@prosopo/contract": "2.2.3", - "@prosopo/dotenv": "2.2.3", - "@prosopo/server": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/dotenv": "2.3.0", + "@prosopo/server": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "@typegoose/auto-increment": "4.6.0", "cors": "2.8.5", "express": "4.21.1", @@ -131,7 +131,7 @@ "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/jsonwebtoken": "9.0.6", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", @@ -150,17 +150,17 @@ }, "demos/cypress-shared": { "name": "@prosopo/cypress-shared", - "version": "2.2.3", + "version": "2.3.0", "dependencies": { - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1" }, "devDependencies": { "@cypress/xpath": "2.0.3", - "@prosopo/common": "2.2.3", - "@prosopo/datasets": "2.2.3", - "@prosopo/types-database": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/datasets": "2.3.0", + "@prosopo/types-database": "2.3.0", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", @@ -182,12 +182,12 @@ }, "demos/provider-mock": { "name": "@prosopo/provider-mock", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/provider": "2.2.3", - "@prosopo/types": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/provider": "2.3.0", + "@prosopo/types": "2.3.0", "cors": "2.8.5", "express": "4.21.1" }, @@ -209,7 +209,7 @@ }, "dev/config": { "name": "@prosopo/config", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@babel/core": "7.25.2", @@ -217,9 +217,9 @@ "@babel/plugin-transform-react-jsx": "7.25.2", "@babel/plugin-transform-runtime": "7.25.4", "@babel/preset-env": "7.25.4", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "@rollup/plugin-alias": "5.1.0", "@rollup/plugin-babel": "6.0.4", "@rollup/plugin-commonjs": "26.0.1", @@ -276,16 +276,16 @@ }, "dev/flux": { "name": "@prosopo/flux", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@noble/curves": "1.6.0", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/dotenv": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/dotenv": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1", "openpgp": "5.11.2", "qs": "6.13.0", @@ -330,7 +330,7 @@ }, "dev/gh-actions": { "name": "@prosopo/gh-actions", - "version": "2.2.3", + "version": "2.3.0", "license": "ISC", "dependencies": { "@octokit/graphql": "8.1.1", @@ -355,10 +355,10 @@ }, "dev/lint": { "name": "@prosopo/lint", - "version": "2.2.3", + "version": "2.3.0", "license": "ISC", "dependencies": { - "@prosopo/util": "2.2.3", + "@prosopo/util": "2.3.0", "express": "4.21.1", "fast-glob": "3.3.2", "zod": "3.23.8" @@ -382,7 +382,7 @@ }, "dev/prosoponator-bot": { "name": "@prosopo/prosoponator-bot", - "version": "2.2.3", + "version": "2.3.0", "license": "ISC", "dependencies": { "@actions/core": "1.10.1", @@ -407,7 +407,7 @@ }, "dev/scripts": { "name": "@prosopo/scripts", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@iarna/toml": "2.2.5", @@ -416,18 +416,19 @@ "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/cli": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/contract": "2.2.3", - "@prosopo/datasets": "2.2.3", - "@prosopo/dotenv": "2.2.3", - "@prosopo/env": "2.2.3", - "@prosopo/provider": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", - "@prosopo/types-env": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/account": "2.3.0", + "@prosopo/cli": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/datasets": "2.3.0", + "@prosopo/dotenv": "2.3.0", + "@prosopo/env": "2.3.0", + "@prosopo/keyring": "2.3.0", + "@prosopo/provider": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", + "@prosopo/types-env": "2.3.0", + "@prosopo/util": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1", "fast-glob": "3.3.2", @@ -482,10 +483,10 @@ }, "dev/ts-brand": { "name": "@prosopo/ts-brand", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1" }, @@ -507,10 +508,10 @@ }, "dev/vite-plugin-watch-workspace": { "name": "@prosopo/vite-plugin-watch-workspace", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "debug": "4.3.7", "esbuild": "0.23.1", "express": "4.21.1", @@ -533,6 +534,23 @@ "npm": ">=9" } }, + "dev/vite-plugin-watch-workspace/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/@actions/core": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", @@ -587,6 +605,28 @@ "node": ">=6.0.0" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.2.tgz", + "integrity": "sha512-RtWv9jFN2/bLExuZgFFZ0I3pWWeezAHGgrmjqGGWclATl1aDe3yhCUaI0Ilkp6OCk9zX7+FjvDasEX8Q9Rxc5w==", + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^11.0.2" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", @@ -602,9 +642,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -650,13 +690,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -677,26 +717,13 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.9", + "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -761,13 +788,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -858,9 +885,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -884,14 +911,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -900,19 +927,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", @@ -981,12 +995,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", + "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1419,12 +1433,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1594,12 +1608,11 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1734,14 +1747,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1816,12 +1828,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.5.tgz", + "integrity": "sha512-OHqczNm4NTQlW1ghrVY43FPoiRzbmzNVbcgVnMKZN/RQYezHUSdjACjaX50CD3B7UIAjv39+MlsrVDb3v741FA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -2159,15 +2171,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.5.tgz", + "integrity": "sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9" }, @@ -2408,16 +2420,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2426,9 +2438,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", + "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2620,10 +2632,120 @@ "node": ">=0.1.90" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", + "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", + "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", + "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.1", + "@csstools/css-calc": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@cypress/request": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.6.tgz", - "integrity": "sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz", + "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2640,7 +2762,7 @@ "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.13.0", + "qs": "6.13.1", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -2650,6 +2772,22 @@ "node": ">= 6" } }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@cypress/request/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -2747,9 +2885,9 @@ } }, "node_modules/@emotion/cache": { - "version": "11.13.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.5.tgz", - "integrity": "sha512-Z3xbtJ+UcK76eWkagZ1onvn/wAVb1GOMuR15s30Fm2wrMgC7jzpnO2JZXr4eujTTqoQFUrZIw/rT0c6Zzjca1g==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", "license": "MIT", "dependencies": { "@emotion/memoize": "^0.9.0", @@ -2853,9 +2991,9 @@ "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", - "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", "license": "MIT", "peerDependencies": { "react": ">=16.8.0" @@ -3749,9 +3887,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -3824,9 +3962,9 @@ } }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", - "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz", + "integrity": "sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4017,13 +4155,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.16.8", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.8.tgz", - "integrity": "sha512-3Vl9yFVLU6T3CFtxRMQTcJ60Ijv7wxQi4yjH92+9YXcsqvVspeIYoocqNoIV/1bXGYfyWu5zrCmwQVHaGY7bug==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.14.tgz", + "integrity": "sha512-12t7NKzvYi819IO5IapW2BcR33wP/KAVrU8d7gLhGHoAmhDxyXlRoKiRij3TOD8+uzk0B6R9wHUNKi4baJcRNg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.16.8", + "@mui/utils": "^5.16.14", "prop-types": "^15.8.1" }, "engines": { @@ -4044,13 +4182,13 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.16.8", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.8.tgz", - "integrity": "sha512-OFdgFf8JczSRs0kvWGdSn0ZeXxWrY0LITDPJ/nAtLEvUUTyrlFaO4il3SECX8ruzvf1VnAxHx4M/4mX9oOn9yA==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.14.tgz", + "integrity": "sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@emotion/cache": "^11.11.0", + "@emotion/cache": "^11.13.5", "csstype": "^3.1.3", "prop-types": "^15.8.1" }, @@ -4076,16 +4214,16 @@ } }, "node_modules/@mui/system": { - "version": "5.16.8", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.8.tgz", - "integrity": "sha512-L32TaFDFpGIi1g6ysRtmhc9zDgrlxDXu3NlrGE8gAsQw/ziHrPdr0PNr20O0POUshA1q14W4dNZ/z0Nx2F9lhA==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.14.tgz", + "integrity": "sha512-KBxMwCb8mSIABnKvoGbvM33XHyT+sN0BzEBG+rsSc0lLQGzs7127KWkCA6/H8h6LZ00XpBEME5MAj8mZLiQ1tw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.16.8", - "@mui/styled-engine": "^5.16.8", + "@mui/private-theming": "^5.16.14", + "@mui/styled-engine": "^5.16.14", "@mui/types": "^7.2.15", - "@mui/utils": "^5.16.8", + "@mui/utils": "^5.16.14", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -4125,9 +4263,9 @@ } }, "node_modules/@mui/types": { - "version": "7.2.19", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.19.tgz", - "integrity": "sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA==", + "version": "7.2.21", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.21.tgz", + "integrity": "sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww==", "license": "MIT", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -4139,9 +4277,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.16.8", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.8.tgz", - "integrity": "sha512-P/yb7BSWallQUeiNGxb+TM8epHteIUC8gzNTdPV2VfKhVY/EnGliHgt5np0GPkjQ7EzwDi/+gBevrAJtf+K94A==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.14.tgz", + "integrity": "sha512-wn1QZkRzSmeXD1IguBVvJJHV3s6rxJrfb6YuC9Kk6Noh9f8Fb54nUs5JRkKm+BOerRhj5fLg05Dhx/H3Ofb8Mg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", @@ -4149,7 +4287,7 @@ "@types/prop-types": "^15.7.12", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.3.1" + "react-is": "^19.0.0" }, "engines": { "node": ">=12.0.0" @@ -4177,13 +4315,19 @@ "node": ">=6" } }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, "node_modules/@noble/curves": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz", - "integrity": "sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.0.tgz", + "integrity": "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.6.0" + "@noble/hashes": "1.7.0" }, "engines": { "node": "^14.21.3 || >=16" @@ -4193,9 +4337,9 @@ } }, "node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.0.tgz", - "integrity": "sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", "license": "MIT", "engines": { "node": "^14.21.3 || >=16" @@ -4320,12 +4464,12 @@ } }, "node_modules/@octokit/graphql/node_modules/@octokit/endpoint": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz", - "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.2.tgz", + "integrity": "sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==", "license": "MIT", "dependencies": { - "@octokit/types": "^13.0.0", + "@octokit/types": "^13.6.2", "universal-user-agent": "^7.0.2" }, "engines": { @@ -4333,14 +4477,15 @@ } }, "node_modules/@octokit/graphql/node_modules/@octokit/request": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz", - "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.4.tgz", + "integrity": "sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==", "license": "MIT", "dependencies": { "@octokit/endpoint": "^10.0.0", "@octokit/request-error": "^6.0.1", - "@octokit/types": "^13.1.0", + "@octokit/types": "^13.6.2", + "fast-content-type-parse": "^2.0.0", "universal-user-agent": "^7.0.2" }, "engines": { @@ -4348,12 +4493,12 @@ } }, "node_modules/@octokit/graphql/node_modules/@octokit/request-error": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.5.tgz", - "integrity": "sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.6.tgz", + "integrity": "sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==", "license": "MIT", "dependencies": { - "@octokit/types": "^13.0.0" + "@octokit/types": "^13.6.2" }, "engines": { "node": ">= 18" @@ -4366,9 +4511,9 @@ "license": "ISC" }, "node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", + "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { @@ -4461,12 +4606,12 @@ } }, "node_modules/@octokit/types": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.2.tgz", - "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.7.0.tgz", + "integrity": "sha512-BXfRP+3P3IN6fd4uF3SniaHKOO4UXWBfkdR3vA8mIvaoO/wLjGN5qivUtW0QRitBHHMcfC41SLhNVYIZZE+wkA==", "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^22.2.0" + "@octokit/openapi-types": "^23.0.1" } }, "node_modules/@pkgjs/parseargs": { @@ -4548,29 +4693,29 @@ "optional": true }, "node_modules/@polkadot/api": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-15.0.1.tgz", - "integrity": "sha512-ZOqw99B70XrX0it0cWu1YSBrtGNhdFpk5zvUVL5+FD8iyO+Tuk1m32VR0PukDCdlwxFXuEw7vRdZX/G/BzoZhg==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-15.2.1.tgz", + "integrity": "sha512-EuhchtYF7xR/oZxjgyFhzXtkViYUABIYFyEbock23kHT5lqOzSlW25YUgdNH/7I5DLD2Y0Q1oHQiQGUaniER/w==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/api-augment": "15.0.1", - "@polkadot/api-base": "15.0.1", - "@polkadot/api-derive": "15.0.1", - "@polkadot/keyring": "^13.2.3", - "@polkadot/rpc-augment": "15.0.1", - "@polkadot/rpc-core": "15.0.1", - "@polkadot/rpc-provider": "15.0.1", - "@polkadot/types": "15.0.1", - "@polkadot/types-augment": "15.0.1", - "@polkadot/types-codec": "15.0.1", - "@polkadot/types-create": "15.0.1", - "@polkadot/types-known": "15.0.1", - "@polkadot/util": "^13.2.3", - "@polkadot/util-crypto": "^13.2.3", + "@polkadot/api-augment": "15.2.1", + "@polkadot/api-base": "15.2.1", + "@polkadot/api-derive": "15.2.1", + "@polkadot/keyring": "^13.3.1", + "@polkadot/rpc-augment": "15.2.1", + "@polkadot/rpc-core": "15.2.1", + "@polkadot/rpc-provider": "15.2.1", + "@polkadot/types": "15.2.1", + "@polkadot/types-augment": "15.2.1", + "@polkadot/types-codec": "15.2.1", + "@polkadot/types-create": "15.2.1", + "@polkadot/types-known": "15.2.1", + "@polkadot/util": "^13.3.1", + "@polkadot/util-crypto": "^13.3.1", "eventemitter3": "^5.0.1", "rxjs": "^7.8.1", - "tslib": "^2.8.0" + "tslib": "^2.8.1" }, "engines": { "node": ">=18" @@ -4787,90 +4932,90 @@ "peer": true }, "node_modules/@polkadot/api/node_modules/@polkadot/api-augment": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-15.0.1.tgz", - "integrity": "sha512-dNFrim/87+rStNCrI1aSaH0nZzRadDwEIya/p860lFRVZQpkBvZlqvSBQUqcKxI0c5c1pp1uaSEixq+A+IOUBg==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-15.2.1.tgz", + "integrity": "sha512-ks6dALz9phfu/+nh/axNzy76ykYzJV6t0Y0V/Rb6R4WsNJHOs9o9RK9b3MAM6bNYNuKAmyI0CTT1E+Bo8JACDw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/api-base": "15.0.1", - "@polkadot/rpc-augment": "15.0.1", - "@polkadot/types": "15.0.1", - "@polkadot/types-augment": "15.0.1", - "@polkadot/types-codec": "15.0.1", - "@polkadot/util": "^13.2.3", - "tslib": "^2.8.0" + "@polkadot/api-base": "15.2.1", + "@polkadot/rpc-augment": "15.2.1", + "@polkadot/types": "15.2.1", + "@polkadot/types-augment": "15.2.1", + "@polkadot/types-codec": "15.2.1", + "@polkadot/util": "^13.3.1", + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/api-base": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-15.0.1.tgz", - "integrity": "sha512-P4WQ+SqyuotVd//EFMIzlWLRbER9JycpdmTaKof2NpVioGotbHhJtO4TXPC3CW1C8zovM7KYrcWtz6b8/FxqoA==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-15.2.1.tgz", + "integrity": "sha512-wsVfnukDVJR99MqzV26c6HdQe05hFLgNyNqh/38g7/+/xp6anKPU+0FMlf6sBAKHrkRdHNB4uFD0jueUWBNIVA==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/rpc-core": "15.0.1", - "@polkadot/types": "15.0.1", - "@polkadot/util": "^13.2.3", + "@polkadot/rpc-core": "15.2.1", + "@polkadot/types": "15.2.1", + "@polkadot/util": "^13.3.1", "rxjs": "^7.8.1", - "tslib": "^2.8.0" + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/api-derive": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-15.0.1.tgz", - "integrity": "sha512-gaLqZ8wL+hGMntq5gxHb6Rv+EQzmmnC63plMBvk5pnNfCm4xjN43GYpbOwSQknHVNo+irC7qwD3GyPK6TfFUUA==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-15.2.1.tgz", + "integrity": "sha512-jT8J/wwZPz2uV0i9oUzosri1yZ3unqrWhIPqKBa843gmlItVDny9KUGFRw3D+6AqEU1J/u4DMbcnlA2u7vNT0Q==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/api": "15.0.1", - "@polkadot/api-augment": "15.0.1", - "@polkadot/api-base": "15.0.1", - "@polkadot/rpc-core": "15.0.1", - "@polkadot/types": "15.0.1", - "@polkadot/types-codec": "15.0.1", - "@polkadot/util": "^13.2.3", - "@polkadot/util-crypto": "^13.2.3", + "@polkadot/api": "15.2.1", + "@polkadot/api-augment": "15.2.1", + "@polkadot/api-base": "15.2.1", + "@polkadot/rpc-core": "15.2.1", + "@polkadot/types": "15.2.1", + "@polkadot/types-codec": "15.2.1", + "@polkadot/util": "^13.3.1", + "@polkadot/util-crypto": "^13.3.1", "rxjs": "^7.8.1", - "tslib": "^2.8.0" + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/keyring": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.2.3.tgz", - "integrity": "sha512-pgTo6DXNXub0wGD+MnVHYhKxf80Jl+QMOCb818ioGdXz++Uw4mTueFAwtB+N7TGo0HafhChUiNJDxFdlDkcAng==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.3.1.tgz", + "integrity": "sha512-PT3uG9MqciPyoEz/f23RRMSlht77fo1hZaA1Vbcs1Rz7h7qFC0+7jFI9Ak30EJh9V0I2YugfzqAe3NjjyDxlvw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/util": "13.2.3", - "@polkadot/util-crypto": "13.2.3", + "@polkadot/util": "13.3.1", + "@polkadot/util-crypto": "13.3.1", "tslib": "^2.8.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@polkadot/util": "13.2.3", - "@polkadot/util-crypto": "13.2.3" + "@polkadot/util": "13.3.1", + "@polkadot/util-crypto": "13.3.1" } }, "node_modules/@polkadot/api/node_modules/@polkadot/networks": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.2.3.tgz", - "integrity": "sha512-mG+zkXg/33AyPrkv2xBbAo3LBUwOwBn6qznBU/4jxiZPnVvCwMaxE7xHM22B5riItbNJ169FXv3wy0v6ZmkFbw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.3.1.tgz", + "integrity": "sha512-g/0OmCMUrbbW4RQ/xajTYd2SMJvFKY4kmMvpxtNN57hWQpY7c5oDXSz57jGH2uwvcBWeDfaNokcS+9hJL1RBcA==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/util": "13.2.3", + "@polkadot/util": "13.3.1", "@substrate/ss58-registry": "^1.51.0", "tslib": "^2.8.0" }, @@ -4879,59 +5024,59 @@ } }, "node_modules/@polkadot/api/node_modules/@polkadot/rpc-augment": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-15.0.1.tgz", - "integrity": "sha512-4FoY+oXC08+vaLMAvFgOOjcFHNBHEv2kOqgxtO/yCyMLNvyRRnrBtMofznJ1EWEwzehvU5iSlbMCerKdImFRZQ==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-15.2.1.tgz", + "integrity": "sha512-RyzJc6DEZzVUX5ABHJNLkxyna23qrmKVqavgAIq/GVvhh96huWDogq1+fk4qHNPSg8h7U3iWL4yHuLFl3C2tNQ==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/rpc-core": "15.0.1", - "@polkadot/types": "15.0.1", - "@polkadot/types-codec": "15.0.1", - "@polkadot/util": "^13.2.3", - "tslib": "^2.8.0" + "@polkadot/rpc-core": "15.2.1", + "@polkadot/types": "15.2.1", + "@polkadot/types-codec": "15.2.1", + "@polkadot/util": "^13.3.1", + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/rpc-core": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-15.0.1.tgz", - "integrity": "sha512-I5F1T17Nr5oEuqAysP7n14tWym54hCriqj0pV0tM4yfIF0iWaWPkqWNRU7uNfv86n3m15IMGoMapvgZVnUF5LQ==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-15.2.1.tgz", + "integrity": "sha512-0oj8DpSyycNz8033BdRy300OdrwWlKYAtbpKs97a8wUhESNLl+QsrMv4652JA2hvnJ2ia91qQqGI+jaGSF1fbg==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/rpc-augment": "15.0.1", - "@polkadot/rpc-provider": "15.0.1", - "@polkadot/types": "15.0.1", - "@polkadot/util": "^13.2.3", + "@polkadot/rpc-augment": "15.2.1", + "@polkadot/rpc-provider": "15.2.1", + "@polkadot/types": "15.2.1", + "@polkadot/util": "^13.3.1", "rxjs": "^7.8.1", - "tslib": "^2.8.0" + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/rpc-provider": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-15.0.1.tgz", - "integrity": "sha512-ziRob/sco751+OK700vNh7IivysFOeZthO7JpC8CEQhZ2c+z/HY7bNsAucy1q1ELGe7xLMZW2/rm/RG285ZDPQ==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-15.2.1.tgz", + "integrity": "sha512-J5tz+E2/wpvGV+LS2JvTKQ+5mdbJn2PM+l/rH+EOjYqCb8gOtQ3UPY6SbRkGQmbJUxIIXAiPo5nmKTVC8TqrBw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/keyring": "^13.2.3", - "@polkadot/types": "15.0.1", - "@polkadot/types-support": "15.0.1", - "@polkadot/util": "^13.2.3", - "@polkadot/util-crypto": "^13.2.3", - "@polkadot/x-fetch": "^13.2.3", - "@polkadot/x-global": "^13.2.3", - "@polkadot/x-ws": "^13.2.3", + "@polkadot/keyring": "^13.3.1", + "@polkadot/types": "15.2.1", + "@polkadot/types-support": "15.2.1", + "@polkadot/util": "^13.3.1", + "@polkadot/util-crypto": "^13.3.1", + "@polkadot/x-fetch": "^13.3.1", + "@polkadot/x-global": "^13.3.1", + "@polkadot/x-ws": "^13.3.1", "eventemitter3": "^5.0.1", "mock-socket": "^9.3.1", "nock": "^13.5.5", - "tslib": "^2.8.0" + "tslib": "^2.8.1" }, "engines": { "node": ">=18" @@ -4941,114 +5086,114 @@ } }, "node_modules/@polkadot/api/node_modules/@polkadot/types": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-15.0.1.tgz", - "integrity": "sha512-jnn0h8Z4O3l/UjrBOJPmkfKjuC6fSqhQfsn7HpWF18lEicGp4/A7X3AZryIg8npKHHiuH30bK/o1VuivH+4dVw==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-15.2.1.tgz", + "integrity": "sha512-5mLSlfJSv8/mll4EgUABrUs47nC4PLD7l4ATgVnYYNg9W3iTC37qVu8+D251/W0IAuDeA0PKXnSOlvAtaBgRnQ==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/keyring": "^13.2.3", - "@polkadot/types-augment": "15.0.1", - "@polkadot/types-codec": "15.0.1", - "@polkadot/types-create": "15.0.1", - "@polkadot/util": "^13.2.3", - "@polkadot/util-crypto": "^13.2.3", + "@polkadot/keyring": "^13.3.1", + "@polkadot/types-augment": "15.2.1", + "@polkadot/types-codec": "15.2.1", + "@polkadot/types-create": "15.2.1", + "@polkadot/util": "^13.3.1", + "@polkadot/util-crypto": "^13.3.1", "rxjs": "^7.8.1", - "tslib": "^2.8.0" + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/types-augment": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-15.0.1.tgz", - "integrity": "sha512-6fTjJmTGd46UUIYPHr5oA6kiFl6IY45dvDgUQu07AmVdEQlq3OPq/7GyS639SLHHfMLSPbFKyt1iMVj9BNu0qA==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-15.2.1.tgz", + "integrity": "sha512-Sa90PPbqGuBINPkaZydkshf+bd+3CHQTwdeImzEZ8TmiW6dD163mjRlCNbBq2pDiD9swTjmNc4/hUF/9M6mbUw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/types": "15.0.1", - "@polkadot/types-codec": "15.0.1", - "@polkadot/util": "^13.2.3", - "tslib": "^2.8.0" + "@polkadot/types": "15.2.1", + "@polkadot/types-codec": "15.2.1", + "@polkadot/util": "^13.3.1", + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/types-codec": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-15.0.1.tgz", - "integrity": "sha512-SLypmYH6FYRmqGG8TBbi4X0tYh1OUZEMNkujln2eHxsuFIYRGrHFnEohtkF9ktSxoUji2ph9I5ZW5gqQvEsXrA==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-15.2.1.tgz", + "integrity": "sha512-Q5SuIgjAPLeTDLIlXMVd2Lyp2BvBhUXPxdXDRDC68tf/lCKyRlmTOkYFdvM11j4MY+ImdLxTzOdjLoIk+f2P8w==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/util": "^13.2.3", - "@polkadot/x-bigint": "^13.2.3", - "tslib": "^2.8.0" + "@polkadot/util": "^13.3.1", + "@polkadot/x-bigint": "^13.3.1", + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/types-create": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-15.0.1.tgz", - "integrity": "sha512-M1vs5o3sw8p3g88GhJgz2vSSgxnr5CfbaL4r5EYzR+Hx9xUvz03aEofySvodusEpdRQ9MijnsNSP9306xvcqhw==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-15.2.1.tgz", + "integrity": "sha512-u3WbKfmYkyk0phoPVsdgQLpgogdKkYgb02Y3d1oM1FVmXWDj/OJX0T9ZSL1PhlD5ws6XTPFi1VYMzRvSNEx0Sw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/types-codec": "15.0.1", - "@polkadot/util": "^13.2.3", - "tslib": "^2.8.0" + "@polkadot/types-codec": "15.2.1", + "@polkadot/util": "^13.3.1", + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/types-known": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-15.0.1.tgz", - "integrity": "sha512-9VC6QX4/JAjWmnSdaZIm4n8CgmVj9KutgQ5/Uy9VBrTwfRzUPIBwHZT8lPQLeN1WwQRbtc5ojDoo2SR+OqGTqw==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-15.2.1.tgz", + "integrity": "sha512-T8HgcS4cacuHr3qvKZm4N3yC5dY1xy3lxnH7W7c7WdXDmXPrF8kCE5l813xGpDWHrpdigSGtKfFB1ZqhKK/4dQ==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/networks": "^13.2.3", - "@polkadot/types": "15.0.1", - "@polkadot/types-codec": "15.0.1", - "@polkadot/types-create": "15.0.1", - "@polkadot/util": "^13.2.3", - "tslib": "^2.8.0" + "@polkadot/networks": "^13.3.1", + "@polkadot/types": "15.2.1", + "@polkadot/types-codec": "15.2.1", + "@polkadot/types-create": "15.2.1", + "@polkadot/util": "^13.3.1", + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/types-support": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-15.0.1.tgz", - "integrity": "sha512-w/IWFuDn290brw75ZXKPkQMazz0yizE0zK0XuqP2S4IW009x+z0peRc7Q4k36JOqDVDwSc38vTxWtRPVqdoI1g==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-15.2.1.tgz", + "integrity": "sha512-c6wqHyEhlvf3em+Kxz0sCvAd3ngZFVAqrtx6KmyfHFCHlu10SUb5Lh3+Qia6le7soB+oivKBn8BbmgbAUx7eLg==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/util": "^13.2.3", - "tslib": "^2.8.0" + "@polkadot/util": "^13.3.1", + "tslib": "^2.8.1" }, "engines": { "node": ">=18" } }, "node_modules/@polkadot/api/node_modules/@polkadot/util": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.2.3.tgz", - "integrity": "sha512-pioNnsig3qHXrfOKMe4Yqos8B8N3/EZUpS+WfTpWnn1VjYban/0GrTXeavPlAwggnY27b8fS6rBzQBhnVYDw8g==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.3.1.tgz", + "integrity": "sha512-5crLP/rUZOJzuo/W8t73J8PxpibJ5vrxY57rR6V+mIpCZd1ORiw0wxeHcV5F9Adpn7yJyuGBwxPbueNR5Rr1Zw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/x-bigint": "13.2.3", - "@polkadot/x-global": "13.2.3", - "@polkadot/x-textdecoder": "13.2.3", - "@polkadot/x-textencoder": "13.2.3", + "@polkadot/x-bigint": "13.3.1", + "@polkadot/x-global": "13.3.1", + "@polkadot/x-textdecoder": "13.3.1", + "@polkadot/x-textencoder": "13.3.1", "@types/bn.js": "^5.1.6", "bn.js": "^5.2.1", "tslib": "^2.8.0" @@ -5058,20 +5203,20 @@ } }, "node_modules/@polkadot/api/node_modules/@polkadot/util-crypto": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.2.3.tgz", - "integrity": "sha512-5sbggmLbn5eiuVMyPROPlT5roHRqdKHOfSpioNbGvGIZ1qIWVoC1RfsK0NWJOVGDzy6DpQe0KYT/kgcU5Xsrzw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.3.1.tgz", + "integrity": "sha512-FU6yf3IY++DKlf0eqO9/obe2y1zuZ5rbqRs75fyOME/5VXio1fA3GIpW7aFphyneFRd78G8QLh8kn0oIwBGMNg==", "license": "Apache-2.0", "peer": true, "dependencies": { "@noble/curves": "^1.3.0", "@noble/hashes": "^1.3.3", - "@polkadot/networks": "13.2.3", - "@polkadot/util": "13.2.3", + "@polkadot/networks": "13.3.1", + "@polkadot/util": "13.3.1", "@polkadot/wasm-crypto": "^7.4.1", "@polkadot/wasm-util": "^7.4.1", - "@polkadot/x-bigint": "13.2.3", - "@polkadot/x-randomvalues": "13.2.3", + "@polkadot/x-bigint": "13.3.1", + "@polkadot/x-randomvalues": "13.3.1", "@scure/base": "^1.1.7", "tslib": "^2.8.0" }, @@ -5079,17 +5224,17 @@ "node": ">=18" }, "peerDependencies": { - "@polkadot/util": "13.2.3" + "@polkadot/util": "13.3.1" } }, "node_modules/@polkadot/api/node_modules/@polkadot/x-bigint": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.2.3.tgz", - "integrity": "sha512-VKgEAh0LsxTd/Hg517Tt5ZU4CySjBwMpaojbkjgv3fOdg1cN7t4eFEUxpyj7mlO0cp22SzDh7nmy4TO98qhLQA==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.3.1.tgz", + "integrity": "sha512-ewc708a7LUdrT92v9DsSAIbcJQBn3aR9/LavF/iyMOq5lZJyPXDSjAnskfMs818R3RLCrKVKfs+aKkxt2eqo8g==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -5097,13 +5242,13 @@ } }, "node_modules/@polkadot/api/node_modules/@polkadot/x-fetch": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.2.3.tgz", - "integrity": "sha512-7Nmk+8ieEGzz43nc1rX6nH3rQo6rhGmAaIXJWnXY9gOHY0k1me1bJYbP+xDdh8vcLh8eY3D1sESUwG6QYZW2lg==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.3.1.tgz", + "integrity": "sha512-J+HM42j0KGqdC/eo7vmsdLPz74MR7+0My4km6TG9HGjKqqztwygtenpopPod2SbRnL4nHiEG0wZzpVOW6HN2gw==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "node-fetch": "^3.3.2", "tslib": "^2.8.0" }, @@ -5112,9 +5257,9 @@ } }, "node_modules/@polkadot/api/node_modules/@polkadot/x-global": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.2.3.tgz", - "integrity": "sha512-7MYQIAEwBkRcNrgqac5PbB0kNPlI6ISJEy6/Nb+crj8BFjQ8rf11PF49fq0QsvDeuYM1aNLigrvYZNptQs4lbw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.3.1.tgz", + "integrity": "sha512-861TeIw49a3JvkwlUWrddfG+JaUqtFZDsemYxxZIjjcRJLrKOsoKNqHbiHi2OPrwlX8PwAA/wc5I9Q4XRQ7KEg==", "license": "Apache-2.0", "peer": true, "dependencies": { @@ -5125,31 +5270,31 @@ } }, "node_modules/@polkadot/api/node_modules/@polkadot/x-randomvalues": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.2.3.tgz", - "integrity": "sha512-Zf0GTfLmVk+VzPUmcQSpXjjmFzMTjPhXoLuIoE7xIu73T+vQ+TX9j7DvorN6bIRsnZ9l1SyTZsSf/NTjNZKIZg==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.3.1.tgz", + "integrity": "sha512-GIb0au3vIX2U/DRH0PRckM+1I4EIbU8PLX1roGJgN1MAYKWiylJTKPVoBMafMM87o8qauOevJ46uYB/qlfbiWg==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@polkadot/util": "13.2.3", + "@polkadot/util": "13.3.1", "@polkadot/wasm-util": "*" } }, "node_modules/@polkadot/api/node_modules/@polkadot/x-textdecoder": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.2.3.tgz", - "integrity": "sha512-i8hRXPtGknmdm3FYv6/94I52VXHJZa5sgYNw1+Hqb4Jqmq4awUjea35CKXd/+aw70Qn8Ngg31l2GoiH494fa+Q==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.3.1.tgz", + "integrity": "sha512-g2R9O1p0ZsNDhZ3uEBZh6fQaVLlo3yFr0YNqt15v7e9lBI4APvTJ202EINlo2jB5lz/R438/BdjEA3AL+0zUtQ==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -5157,13 +5302,13 @@ } }, "node_modules/@polkadot/api/node_modules/@polkadot/x-textencoder": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.2.3.tgz", - "integrity": "sha512-wJI3Bb/dC4zyBXJFm5+ZhyBXWoI5wvP8k8qX0/ZC0PQsgSAqs7LVhiofk4Wd94n0P41W5re58LrGXLyziSAshw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.3.1.tgz", + "integrity": "sha512-DnHLUdoKDYxekfxopuUuPB+j5Mu7Jemejcduu5gz3/89GP/sYPAu0CAVbq9B+hK1yGjBBj31eA4wkAV1oktYmg==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -5171,13 +5316,13 @@ } }, "node_modules/@polkadot/api/node_modules/@polkadot/x-ws": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.2.3.tgz", - "integrity": "sha512-Y6MTAWgcnrnx/LkBx65X3ZyoJH5EFj3tXtflRoKg1+PLHSLuNBV7Wi5mLcE70z4e5c+4hgBbLq+8SqCqzFtSPw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.3.1.tgz", + "integrity": "sha512-ytqkC7FwVs4BlzNFAmPMFp+xD1KIdMMP/mvCSOrnxjlsyM5DVGop4x4c2ZgDUBmrFqmIiVkWDfMIZeOxui2OLQ==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0", "ws": "^8.18.0" }, @@ -5623,15 +5768,15 @@ } }, "node_modules/@polkadot/ui-keyring": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/@polkadot/ui-keyring/-/ui-keyring-3.11.3.tgz", - "integrity": "sha512-Lj5Y42ua76/9gApDqBNtQstc9gXwAyNidScYL4DMkoTcC5mDHpvqPhv9y8ZE5gvzG6ZFLRc1GOi795sLjqKv2A==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@polkadot/ui-keyring/-/ui-keyring-3.12.1.tgz", + "integrity": "sha512-PWwfqjTGcaWcVYHsO0IYBvT4nefNlaCQ2x7wgBIRg/IzSv/5pOru+E4sGcRa8FJL0soZsWt2bIl3xH6ZAVm98Q==", "license": "Apache-2.0", "dependencies": { - "@polkadot/keyring": "^13.2.3", - "@polkadot/ui-settings": "3.11.3", - "@polkadot/util": "^13.2.3", - "@polkadot/util-crypto": "^13.2.3", + "@polkadot/keyring": "^13.3.1", + "@polkadot/ui-settings": "3.12.1", + "@polkadot/util": "^13.3.1", + "@polkadot/util-crypto": "^13.3.1", "mkdirp": "^3.0.1", "rxjs": "^7.8.1", "store": "^2.0.12", @@ -5647,30 +5792,30 @@ } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/keyring": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.2.3.tgz", - "integrity": "sha512-pgTo6DXNXub0wGD+MnVHYhKxf80Jl+QMOCb818ioGdXz++Uw4mTueFAwtB+N7TGo0HafhChUiNJDxFdlDkcAng==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.3.1.tgz", + "integrity": "sha512-PT3uG9MqciPyoEz/f23RRMSlht77fo1hZaA1Vbcs1Rz7h7qFC0+7jFI9Ak30EJh9V0I2YugfzqAe3NjjyDxlvw==", "license": "Apache-2.0", "dependencies": { - "@polkadot/util": "13.2.3", - "@polkadot/util-crypto": "13.2.3", + "@polkadot/util": "13.3.1", + "@polkadot/util-crypto": "13.3.1", "tslib": "^2.8.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@polkadot/util": "13.2.3", - "@polkadot/util-crypto": "13.2.3" + "@polkadot/util": "13.3.1", + "@polkadot/util-crypto": "13.3.1" } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/networks": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.2.3.tgz", - "integrity": "sha512-mG+zkXg/33AyPrkv2xBbAo3LBUwOwBn6qznBU/4jxiZPnVvCwMaxE7xHM22B5riItbNJ169FXv3wy0v6ZmkFbw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.3.1.tgz", + "integrity": "sha512-g/0OmCMUrbbW4RQ/xajTYd2SMJvFKY4kmMvpxtNN57hWQpY7c5oDXSz57jGH2uwvcBWeDfaNokcS+9hJL1RBcA==", "license": "Apache-2.0", "dependencies": { - "@polkadot/util": "13.2.3", + "@polkadot/util": "13.3.1", "@substrate/ss58-registry": "^1.51.0", "tslib": "^2.8.0" }, @@ -5679,15 +5824,15 @@ } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/util": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.2.3.tgz", - "integrity": "sha512-pioNnsig3qHXrfOKMe4Yqos8B8N3/EZUpS+WfTpWnn1VjYban/0GrTXeavPlAwggnY27b8fS6rBzQBhnVYDw8g==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.3.1.tgz", + "integrity": "sha512-5crLP/rUZOJzuo/W8t73J8PxpibJ5vrxY57rR6V+mIpCZd1ORiw0wxeHcV5F9Adpn7yJyuGBwxPbueNR5Rr1Zw==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-bigint": "13.2.3", - "@polkadot/x-global": "13.2.3", - "@polkadot/x-textdecoder": "13.2.3", - "@polkadot/x-textencoder": "13.2.3", + "@polkadot/x-bigint": "13.3.1", + "@polkadot/x-global": "13.3.1", + "@polkadot/x-textdecoder": "13.3.1", + "@polkadot/x-textencoder": "13.3.1", "@types/bn.js": "^5.1.6", "bn.js": "^5.2.1", "tslib": "^2.8.0" @@ -5697,19 +5842,19 @@ } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/util-crypto": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.2.3.tgz", - "integrity": "sha512-5sbggmLbn5eiuVMyPROPlT5roHRqdKHOfSpioNbGvGIZ1qIWVoC1RfsK0NWJOVGDzy6DpQe0KYT/kgcU5Xsrzw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.3.1.tgz", + "integrity": "sha512-FU6yf3IY++DKlf0eqO9/obe2y1zuZ5rbqRs75fyOME/5VXio1fA3GIpW7aFphyneFRd78G8QLh8kn0oIwBGMNg==", "license": "Apache-2.0", "dependencies": { "@noble/curves": "^1.3.0", "@noble/hashes": "^1.3.3", - "@polkadot/networks": "13.2.3", - "@polkadot/util": "13.2.3", + "@polkadot/networks": "13.3.1", + "@polkadot/util": "13.3.1", "@polkadot/wasm-crypto": "^7.4.1", "@polkadot/wasm-util": "^7.4.1", - "@polkadot/x-bigint": "13.2.3", - "@polkadot/x-randomvalues": "13.2.3", + "@polkadot/x-bigint": "13.3.1", + "@polkadot/x-randomvalues": "13.3.1", "@scure/base": "^1.1.7", "tslib": "^2.8.0" }, @@ -5717,16 +5862,16 @@ "node": ">=18" }, "peerDependencies": { - "@polkadot/util": "13.2.3" + "@polkadot/util": "13.3.1" } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/x-bigint": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.2.3.tgz", - "integrity": "sha512-VKgEAh0LsxTd/Hg517Tt5ZU4CySjBwMpaojbkjgv3fOdg1cN7t4eFEUxpyj7mlO0cp22SzDh7nmy4TO98qhLQA==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.3.1.tgz", + "integrity": "sha512-ewc708a7LUdrT92v9DsSAIbcJQBn3aR9/LavF/iyMOq5lZJyPXDSjAnskfMs818R3RLCrKVKfs+aKkxt2eqo8g==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -5734,9 +5879,9 @@ } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/x-global": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.2.3.tgz", - "integrity": "sha512-7MYQIAEwBkRcNrgqac5PbB0kNPlI6ISJEy6/Nb+crj8BFjQ8rf11PF49fq0QsvDeuYM1aNLigrvYZNptQs4lbw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.3.1.tgz", + "integrity": "sha512-861TeIw49a3JvkwlUWrddfG+JaUqtFZDsemYxxZIjjcRJLrKOsoKNqHbiHi2OPrwlX8PwAA/wc5I9Q4XRQ7KEg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -5746,29 +5891,29 @@ } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/x-randomvalues": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.2.3.tgz", - "integrity": "sha512-Zf0GTfLmVk+VzPUmcQSpXjjmFzMTjPhXoLuIoE7xIu73T+vQ+TX9j7DvorN6bIRsnZ9l1SyTZsSf/NTjNZKIZg==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.3.1.tgz", + "integrity": "sha512-GIb0au3vIX2U/DRH0PRckM+1I4EIbU8PLX1roGJgN1MAYKWiylJTKPVoBMafMM87o8qauOevJ46uYB/qlfbiWg==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@polkadot/util": "13.2.3", + "@polkadot/util": "13.3.1", "@polkadot/wasm-util": "*" } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/x-textdecoder": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.2.3.tgz", - "integrity": "sha512-i8hRXPtGknmdm3FYv6/94I52VXHJZa5sgYNw1+Hqb4Jqmq4awUjea35CKXd/+aw70Qn8Ngg31l2GoiH494fa+Q==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.3.1.tgz", + "integrity": "sha512-g2R9O1p0ZsNDhZ3uEBZh6fQaVLlo3yFr0YNqt15v7e9lBI4APvTJ202EINlo2jB5lz/R438/BdjEA3AL+0zUtQ==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -5776,12 +5921,12 @@ } }, "node_modules/@polkadot/ui-keyring/node_modules/@polkadot/x-textencoder": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.2.3.tgz", - "integrity": "sha512-wJI3Bb/dC4zyBXJFm5+ZhyBXWoI5wvP8k8qX0/ZC0PQsgSAqs7LVhiofk4Wd94n0P41W5re58LrGXLyziSAshw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.3.1.tgz", + "integrity": "sha512-DnHLUdoKDYxekfxopuUuPB+j5Mu7Jemejcduu5gz3/89GP/sYPAu0CAVbq9B+hK1yGjBBj31eA4wkAV1oktYmg==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -5795,13 +5940,13 @@ "license": "0BSD" }, "node_modules/@polkadot/ui-settings": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/@polkadot/ui-settings/-/ui-settings-3.11.3.tgz", - "integrity": "sha512-VGtv5pGQM9iFWZ9kpU9TD0auDUb01mTp/DACTgG79mo9icK2XK8KUdkMMh70HuhnS5Dnqsgn7nhYuYqVOGAxeQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@polkadot/ui-settings/-/ui-settings-3.12.1.tgz", + "integrity": "sha512-xFedW4YLtJTdyVHt1V5d4jFdOZKMi05228Q9XNGhahbpYet6eb7P7Ta/Wy5mtKDkI56xbgiOE+PQDxmMG6tjgw==", "license": "Apache-2.0", "dependencies": { - "@polkadot/networks": "^13.2.3", - "@polkadot/util": "^13.2.3", + "@polkadot/networks": "^13.3.1", + "@polkadot/util": "^13.3.1", "eventemitter3": "^5.0.1", "store": "^2.0.12", "tslib": "^2.8.1" @@ -5815,12 +5960,12 @@ } }, "node_modules/@polkadot/ui-settings/node_modules/@polkadot/networks": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.2.3.tgz", - "integrity": "sha512-mG+zkXg/33AyPrkv2xBbAo3LBUwOwBn6qznBU/4jxiZPnVvCwMaxE7xHM22B5riItbNJ169FXv3wy0v6ZmkFbw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.3.1.tgz", + "integrity": "sha512-g/0OmCMUrbbW4RQ/xajTYd2SMJvFKY4kmMvpxtNN57hWQpY7c5oDXSz57jGH2uwvcBWeDfaNokcS+9hJL1RBcA==", "license": "Apache-2.0", "dependencies": { - "@polkadot/util": "13.2.3", + "@polkadot/util": "13.3.1", "@substrate/ss58-registry": "^1.51.0", "tslib": "^2.8.0" }, @@ -5829,15 +5974,15 @@ } }, "node_modules/@polkadot/ui-settings/node_modules/@polkadot/util": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.2.3.tgz", - "integrity": "sha512-pioNnsig3qHXrfOKMe4Yqos8B8N3/EZUpS+WfTpWnn1VjYban/0GrTXeavPlAwggnY27b8fS6rBzQBhnVYDw8g==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.3.1.tgz", + "integrity": "sha512-5crLP/rUZOJzuo/W8t73J8PxpibJ5vrxY57rR6V+mIpCZd1ORiw0wxeHcV5F9Adpn7yJyuGBwxPbueNR5Rr1Zw==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-bigint": "13.2.3", - "@polkadot/x-global": "13.2.3", - "@polkadot/x-textdecoder": "13.2.3", - "@polkadot/x-textencoder": "13.2.3", + "@polkadot/x-bigint": "13.3.1", + "@polkadot/x-global": "13.3.1", + "@polkadot/x-textdecoder": "13.3.1", + "@polkadot/x-textencoder": "13.3.1", "@types/bn.js": "^5.1.6", "bn.js": "^5.2.1", "tslib": "^2.8.0" @@ -5847,12 +5992,12 @@ } }, "node_modules/@polkadot/ui-settings/node_modules/@polkadot/x-bigint": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.2.3.tgz", - "integrity": "sha512-VKgEAh0LsxTd/Hg517Tt5ZU4CySjBwMpaojbkjgv3fOdg1cN7t4eFEUxpyj7mlO0cp22SzDh7nmy4TO98qhLQA==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.3.1.tgz", + "integrity": "sha512-ewc708a7LUdrT92v9DsSAIbcJQBn3aR9/LavF/iyMOq5lZJyPXDSjAnskfMs818R3RLCrKVKfs+aKkxt2eqo8g==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -5860,9 +6005,9 @@ } }, "node_modules/@polkadot/ui-settings/node_modules/@polkadot/x-global": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.2.3.tgz", - "integrity": "sha512-7MYQIAEwBkRcNrgqac5PbB0kNPlI6ISJEy6/Nb+crj8BFjQ8rf11PF49fq0QsvDeuYM1aNLigrvYZNptQs4lbw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.3.1.tgz", + "integrity": "sha512-861TeIw49a3JvkwlUWrddfG+JaUqtFZDsemYxxZIjjcRJLrKOsoKNqHbiHi2OPrwlX8PwAA/wc5I9Q4XRQ7KEg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -5872,12 +6017,12 @@ } }, "node_modules/@polkadot/ui-settings/node_modules/@polkadot/x-textdecoder": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.2.3.tgz", - "integrity": "sha512-i8hRXPtGknmdm3FYv6/94I52VXHJZa5sgYNw1+Hqb4Jqmq4awUjea35CKXd/+aw70Qn8Ngg31l2GoiH494fa+Q==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.3.1.tgz", + "integrity": "sha512-g2R9O1p0ZsNDhZ3uEBZh6fQaVLlo3yFr0YNqt15v7e9lBI4APvTJ202EINlo2jB5lz/R438/BdjEA3AL+0zUtQ==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -5885,12 +6030,12 @@ } }, "node_modules/@polkadot/ui-settings/node_modules/@polkadot/x-textencoder": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.2.3.tgz", - "integrity": "sha512-wJI3Bb/dC4zyBXJFm5+ZhyBXWoI5wvP8k8qX0/ZC0PQsgSAqs7LVhiofk4Wd94n0P41W5re58LrGXLyziSAshw==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.3.1.tgz", + "integrity": "sha512-DnHLUdoKDYxekfxopuUuPB+j5Mu7Jemejcduu5gz3/89GP/sYPAu0CAVbq9B+hK1yGjBBj31eA4wkAV1oktYmg==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.2.3", + "@polkadot/x-global": "13.3.1", "tslib": "^2.8.0" }, "engines": { @@ -6206,9 +6351,58 @@ "link": true }, "node_modules/@prosopo/contract": { - "resolved": "packages/contract", - "link": true - }, + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@prosopo/contract/-/contract-2.2.3.tgz", + "integrity": "sha512-cF15fSaW1xWv2iAT4GzAU2kJVO3ETFwcGKuFck8vuR5G8rm8vWPmO5uqhk0zSh7K+iv6QPBazS9YdAU96bqg/w==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "10.13.1", + "@polkadot/api-contract": "10.13.1", + "@polkadot/keyring": "12.6.2", + "@polkadot/types": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/util": "12.6.2", + "@polkadot/util-crypto": "12.6.2", + "@prosopo/common": "2.2.3", + "@prosopo/tx": "2.2.3", + "@prosopo/types": "2.2.3", + "@prosopo/util": "2.2.3", + "express": "4.21.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "20", + "npm": ">=9" + } + }, + "node_modules/@prosopo/contract/node_modules/@polkadot/api": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.13.1.tgz", + "integrity": "sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api-augment": "10.13.1", + "@polkadot/api-base": "10.13.1", + "@polkadot/api-derive": "10.13.1", + "@polkadot/keyring": "^12.6.2", + "@polkadot/rpc-augment": "10.13.1", + "@polkadot/rpc-core": "10.13.1", + "@polkadot/rpc-provider": "10.13.1", + "@polkadot/types": "10.13.1", + "@polkadot/types-augment": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/types-create": "10.13.1", + "@polkadot/types-known": "10.13.1", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@prosopo/cypress-shared": { "resolved": "demos/cypress-shared", "link": true @@ -6253,6 +6447,10 @@ "resolved": "dev/gh-actions", "link": true }, + "node_modules/@prosopo/keyring": { + "resolved": "packages/keyring", + "link": true + }, "node_modules/@prosopo/lint": { "resolved": "dev/lint", "link": true @@ -6318,8 +6516,54 @@ "link": true }, "node_modules/@prosopo/tx": { - "resolved": "packages/tx", - "link": true + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@prosopo/tx/-/tx-2.2.3.tgz", + "integrity": "sha512-I5op0i88JT9WO7Dh88+gD5uqEPpwvu69zde2eO359uINkBoD3hVu7N5h9aM0ZLL+Li3pYGz3nWb2yaGMXuWLmw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "10.13.1", + "@polkadot/api-augment": "10.13.1", + "@polkadot/api-contract": "10.13.1", + "@polkadot/keyring": "12.6.2", + "@polkadot/types": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/util": "12.6.2", + "@prosopo/common": "2.2.3", + "@prosopo/types": "2.2.3", + "express": "4.21.1" + }, + "engines": { + "node": "20", + "npm": ">=9" + } + }, + "node_modules/@prosopo/tx/node_modules/@polkadot/api": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.13.1.tgz", + "integrity": "sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api-augment": "10.13.1", + "@polkadot/api-base": "10.13.1", + "@polkadot/api-derive": "10.13.1", + "@polkadot/keyring": "^12.6.2", + "@polkadot/rpc-augment": "10.13.1", + "@polkadot/rpc-core": "10.13.1", + "@polkadot/rpc-provider": "10.13.1", + "@polkadot/types": "10.13.1", + "@polkadot/types-augment": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/types-create": "10.13.1", + "@polkadot/types-known": "10.13.1", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + } }, "node_modules/@prosopo/types": { "resolved": "packages/types", @@ -6631,9 +6875,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", - "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -6665,9 +6909,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz", - "integrity": "sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", + "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", "cpu": [ "arm" ], @@ -6678,9 +6922,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz", - "integrity": "sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", + "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", "cpu": [ "arm64" ], @@ -6691,9 +6935,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz", - "integrity": "sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", + "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", "cpu": [ "arm64" ], @@ -6704,9 +6948,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz", - "integrity": "sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", + "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", "cpu": [ "x64" ], @@ -6717,9 +6961,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz", - "integrity": "sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", + "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", "cpu": [ "arm64" ], @@ -6730,9 +6974,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz", - "integrity": "sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", + "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", "cpu": [ "x64" ], @@ -6743,9 +6987,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz", - "integrity": "sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", + "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", "cpu": [ "arm" ], @@ -6756,9 +7000,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz", - "integrity": "sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", + "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", "cpu": [ "arm" ], @@ -6769,9 +7013,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz", - "integrity": "sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", + "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", "cpu": [ "arm64" ], @@ -6782,9 +7026,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz", - "integrity": "sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", + "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", "cpu": [ "arm64" ], @@ -6794,10 +7038,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", + "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz", - "integrity": "sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", + "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", "cpu": [ "ppc64" ], @@ -6808,9 +7065,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz", - "integrity": "sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", + "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", "cpu": [ "riscv64" ], @@ -6821,9 +7078,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz", - "integrity": "sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", + "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", "cpu": [ "s390x" ], @@ -6834,9 +7091,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz", - "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", + "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", "cpu": [ "x64" ], @@ -6847,9 +7104,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz", - "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", + "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", "cpu": [ "x64" ], @@ -6860,9 +7117,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz", - "integrity": "sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", + "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", "cpu": [ "arm64" ], @@ -6873,9 +7130,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz", - "integrity": "sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", + "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", "cpu": [ "ia32" ], @@ -6886,9 +7143,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz", - "integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", + "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", "cpu": [ "x64" ], @@ -6948,9 +7205,9 @@ "optional": true }, "node_modules/@substrate/connect-known-chains": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.8.0.tgz", - "integrity": "sha512-sl7WfeDgnZuPvUl5Xw0XIziOTe8rEBJ3uugyDETGnafxEbjYMv5aJL0ilq5djhnQ7l9OuMJCN3Ckved2yINeeQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.9.0.tgz", + "integrity": "sha512-R7yE0kIRUnvNlMiYramQ+dQwSY0ZpqRJ1mK8hLKlvCbEMqjSFa0n/WYYG6/bst9nNA1O6OZLWpvMso6yhENe3A==", "license": "GPL-3.0-only", "optional": true }, @@ -7301,9 +7558,9 @@ "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", "license": "MIT" }, "node_modules/@types/qs": { @@ -7321,9 +7578,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "18.3.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", + "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -7340,11 +7597,11 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", - "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", "license": "MIT", - "dependencies": { + "peerDependencies": { "@types/react": "*" } }, @@ -8212,14 +8469,14 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -8255,20 +8512,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -8535,9 +8791,9 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", - "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "license": "Apache-2.0", "optional": true }, @@ -8857,9 +9113,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "funding": [ { "type": "opencollective", @@ -8876,9 +9132,9 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { @@ -9012,16 +9268,44 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "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": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -9071,9 +9355,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001686", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz", - "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==", + "version": "1.0.30001692", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", + "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", "funding": [ { "type": "opencollective", @@ -9634,12 +9918,12 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", - "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", + "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", "license": "MIT", "dependencies": { - "browserslist": "^4.24.2" + "browserslist": "^4.24.3" }, "funding": { "type": "opencollective", @@ -9925,17 +10209,24 @@ } }, "node_modules/cssstyle": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", - "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz", + "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==", "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.7.1" + "@asamuzakjp/css-color": "^2.8.2", + "rrweb-cssom": "^0.8.0" }, "engines": { "node": ">=18" } }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "license": "MIT" + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -10126,15 +10417,15 @@ } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10144,31 +10435,31 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -10187,9 +10478,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -10663,6 +10954,20 @@ "url": "https://dotenvx.com" } }, + "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": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -10703,9 +11008,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz", - "integrity": "sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==", + "version": "1.5.80", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.80.tgz", + "integrity": "sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw==", "license": "ISC" }, "node_modules/elliptic": { @@ -10776,6 +11081,23 @@ "xmlhttprequest-ssl": "~2.0.0" } }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/engine.io-parser": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", @@ -10786,9 +11108,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -10847,58 +11169,63 @@ } }, "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -10908,13 +11235,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "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", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -10929,16 +11253,15 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -10948,15 +11271,16 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "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==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -11349,6 +11673,22 @@ ], "license": "MIT" }, + "node_modules/fast-content-type-parse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", + "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "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", @@ -11384,9 +11724,19 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", + "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { @@ -11400,9 +11750,9 @@ } }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -11857,16 +12207,18 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -11931,16 +12283,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11949,6 +12306,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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": ">= 0.4" + } + }, "node_modules/get-stdin": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", @@ -11979,15 +12349,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -12215,13 +12585,10 @@ "license": "MIT" }, "node_modules/gopd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", - "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" }, @@ -12266,12 +12633,15 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", - "funding": { + "engines": { + "node": ">= 0.4" + }, + "funding": { "url": "https://github.com/sponsors/ljharb" } }, @@ -12297,12 +12667,13 @@ } }, "node_modules/has-proto": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", - "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "dunder-proto": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -12666,9 +13037,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", + "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", "dev": true, "license": "MIT" }, @@ -12701,13 +13072,10 @@ } }, "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -13071,15 +13439,15 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -13114,13 +13482,13 @@ } }, "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "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==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13130,14 +13498,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -13153,13 +13522,16 @@ "license": "MIT" }, "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -13198,13 +13570,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.0.tgz", - "integrity": "sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" }, "engines": { @@ -13255,9 +13627,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -13270,12 +13642,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -13286,13 +13660,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13326,13 +13701,13 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", - "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -13351,12 +13726,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -13474,19 +13852,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", @@ -13510,13 +13875,13 @@ } }, "node_modules/is-number-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz", - "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { @@ -13594,14 +13959,13 @@ } }, "node_modules/is-regex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", - "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", - "dev": true, + "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-bind": "^1.0.7", - "gopd": "^1.1.0", + "call-bound": "^1.0.2", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" }, @@ -13626,13 +13990,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -13655,13 +14019,13 @@ } }, "node_modules/is-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz", - "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { @@ -13672,15 +14036,15 @@ } }, "node_modules/is-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.0.tgz", - "integrity": "sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "has-symbols": "^1.0.3", - "safe-regex-test": "^1.0.3" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -13690,12 +14054,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "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": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -13745,27 +14109,30 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -14023,24 +14390,21 @@ } }, "node_modules/jsdom/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } }, "node_modules/jsdom/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -14136,9 +14500,9 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -14626,9 +14990,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.14", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", - "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -14816,6 +15180,15 @@ "url": "https://github.com/sponsors/DavidAnson" } }, + "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/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -14844,9 +15217,9 @@ } }, "node_modules/memfs": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.1.tgz", - "integrity": "sha512-Fq5CMEth+2iprLJ5mNizRcWuiwRZYjNkUD0zKk224jZunE9CRacTRDK8QLALbMBlNX2y3nY6lKZbesCwDwacig==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.0.tgz", + "integrity": "sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -15248,13 +15621,10 @@ } }, "node_modules/mongodb-memory-server-core/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -15290,12 +15660,12 @@ } }, "node_modules/mongodb-memory-server-core/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -15751,9 +16121,9 @@ } }, "node_modules/node-polyfill-webpack-plugin/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -15767,9 +16137,9 @@ } }, "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.32.0.tgz", + "integrity": "sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" @@ -15779,9 +16149,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "license": "MIT" }, "node_modules/node-stdlib-browser": { @@ -16089,14 +16459,16 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -16202,6 +16574,24 @@ "dev": true, "license": "MIT" }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -16235,9 +16625,9 @@ } }, "node_modules/p-map": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", - "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "dev": true, "license": "MIT", "engines": { @@ -16669,9 +17059,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz", - "integrity": "sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", @@ -17228,19 +17618,20 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", - "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -17283,15 +17674,17 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "set-function-name": "^2.0.2" }, "engines": { @@ -17336,6 +17729,18 @@ "regjsparser": "bin/parser" } }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -17400,18 +17805,21 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17532,9 +17940,9 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", + "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", "dev": true, "license": "ISC", "dependencies": { @@ -17625,9 +18033,9 @@ } }, "node_modules/rollup": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.0.tgz", - "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", + "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", "license": "MIT", "dependencies": { "@types/estree": "1.0.6" @@ -17640,24 +18048,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.28.0", - "@rollup/rollup-android-arm64": "4.28.0", - "@rollup/rollup-darwin-arm64": "4.28.0", - "@rollup/rollup-darwin-x64": "4.28.0", - "@rollup/rollup-freebsd-arm64": "4.28.0", - "@rollup/rollup-freebsd-x64": "4.28.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.28.0", - "@rollup/rollup-linux-arm-musleabihf": "4.28.0", - "@rollup/rollup-linux-arm64-gnu": "4.28.0", - "@rollup/rollup-linux-arm64-musl": "4.28.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0", - "@rollup/rollup-linux-riscv64-gnu": "4.28.0", - "@rollup/rollup-linux-s390x-gnu": "4.28.0", - "@rollup/rollup-linux-x64-gnu": "4.28.0", - "@rollup/rollup-linux-x64-musl": "4.28.0", - "@rollup/rollup-win32-arm64-msvc": "4.28.0", - "@rollup/rollup-win32-ia32-msvc": "4.28.0", - "@rollup/rollup-win32-x64-msvc": "4.28.0", + "@rollup/rollup-android-arm-eabi": "4.30.1", + "@rollup/rollup-android-arm64": "4.30.1", + "@rollup/rollup-darwin-arm64": "4.30.1", + "@rollup/rollup-darwin-x64": "4.30.1", + "@rollup/rollup-freebsd-arm64": "4.30.1", + "@rollup/rollup-freebsd-x64": "4.30.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", + "@rollup/rollup-linux-arm-musleabihf": "4.30.1", + "@rollup/rollup-linux-arm64-gnu": "4.30.1", + "@rollup/rollup-linux-arm64-musl": "4.30.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", + "@rollup/rollup-linux-riscv64-gnu": "4.30.1", + "@rollup/rollup-linux-s390x-gnu": "4.30.1", + "@rollup/rollup-linux-x64-gnu": "4.30.1", + "@rollup/rollup-linux-x64-musl": "4.30.1", + "@rollup/rollup-win32-arm64-msvc": "4.30.1", + "@rollup/rollup-win32-ia32-msvc": "4.30.1", + "@rollup/rollup-win32-x64-msvc": "4.30.1", "fsevents": "~2.3.2" } }, @@ -17833,15 +18242,16 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -17871,16 +18281,32 @@ ], "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -17923,9 +18349,9 @@ } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -17934,7 +18360,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -18184,6 +18610,21 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -18296,15 +18737,69 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -18425,6 +18920,23 @@ "node": ">=10.0.0" } }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/socket.io-parser": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", @@ -18438,6 +18950,23 @@ "node": ">=10.0.0" } }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -18692,9 +19221,9 @@ } }, "node_modules/streamx": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.0.tgz", - "integrity": "sha512-Qz6MsDZXJ6ur9u+b+4xCG18TluU7PGlRfXVAAjNiGsFrBUt/ioyLkxbFaKJygoPs+/kW4VyBj0bSj89Qu0IGyg==", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", @@ -18825,16 +19354,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -18844,16 +19376,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -19038,9 +19574,9 @@ "license": "ISC" }, "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -19197,10 +19733,13 @@ } }, "node_modules/text-decoder": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", - "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", - "license": "Apache-2.0" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } }, "node_modules/thingies": { "version": "1.21.0", @@ -19259,9 +19798,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", - "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, @@ -19296,22 +19835,22 @@ } }, "node_modules/tldts": { - "version": "6.1.65", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz", - "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==", + "version": "6.1.71", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.71.tgz", + "integrity": "sha512-LQIHmHnuzfZgZWAf2HzL83TIIrD8NhhI0DVxqo9/FdOd4ilec+NTNZOlDZf7EwrTNoutccbsHjvWHYXLAtvxjw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^6.1.65" + "tldts-core": "^6.1.71" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.1.65", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz", - "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==", + "version": "6.1.71", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.71.tgz", + "integrity": "sha512-LRbChn2YRpic1KxY+ldL1pGXN/oVvKfCVufwfVzEQdFYNo39uF7AJa/WXdo+gYO7PTvdfkCPCed6Hkvz/kR7jg==", "dev": true, "license": "MIT" }, @@ -19346,9 +19885,9 @@ } }, "node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.0.tgz", + "integrity": "sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -19522,32 +20061,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -19557,19 +20096,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", - "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "reflect.getprototypeof": "^1.0.6" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -19620,16 +20159,19 @@ "license": "MIT" }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19741,9 +20283,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "funding": [ { "type": "opencollective", @@ -19761,7 +20303,7 @@ "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -21015,17 +21557,17 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz", - "integrity": "sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.0", - "is-number-object": "^1.1.0", - "is-string": "^1.1.0", - "is-symbol": "^1.1.0" + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -21035,25 +21577,25 @@ } }, "node_modules/which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", + "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -21082,15 +21624,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", - "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -21321,7 +21864,7 @@ }, "packages/account": { "name": "@prosopo/account", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/extension-base": "0.46.9", @@ -21330,15 +21873,15 @@ "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/fingerprint": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/fingerprint": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1", "react": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -21356,14 +21899,14 @@ }, "packages/api": { "name": "@prosopo/api", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/types": "2.2.3", + "@prosopo/types": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -21381,22 +21924,22 @@ }, "packages/cli": { "name": "@prosopo/cli", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/keyring": "12.6.2", "@polkadot/types-codec": "10.13.1", "@polkadot/util-crypto": "12.6.2", - "@prosopo/api": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/contract": "2.2.3", - "@prosopo/dotenv": "2.2.3", - "@prosopo/env": "2.2.3", - "@prosopo/locale": "2.2.3", - "@prosopo/provider": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/api": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/dotenv": "2.3.0", + "@prosopo/env": "2.3.0", + "@prosopo/keyring": "2.3.0", + "@prosopo/locale": "2.3.0", + "@prosopo/provider": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "cors": "2.8.5", "cron-parser": "4.9.0", "dotenv": "16.4.5", @@ -21405,7 +21948,7 @@ "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/cors": "2.8.17", "@types/yargs": "17.0.33", "@vitest/coverage-v8": "2.1.1", @@ -21426,17 +21969,17 @@ }, "packages/common": { "name": "@prosopo/common", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/util-crypto": "12.6.2", - "@prosopo/locale": "2.2.3", + "@prosopo/locale": "2.3.0", "consola": "3.2.3", "express": "4.21.1", "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -21453,80 +21996,15 @@ "npm": ">=9" } }, - "packages/contract": { - "name": "@prosopo/contract", - "version": "2.2.3", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/api": "10.13.1", - "@polkadot/api-contract": "10.13.1", - "@polkadot/keyring": "12.6.2", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/tx": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", - "express": "4.21.1", - "rxjs": "7.8.1" - }, - "devDependencies": { - "@polkadot/api-augment": "10.13.1", - "@prosopo/config": "2.2.3", - "@vitest/coverage-v8": "2.1.1", - "concurrently": "9.0.1", - "del-cli": "6.0.0", - "npm-run-all": "2.1.0", - "tslib": "2.7.0", - "tsx": "4.19.1", - "typescript": "5.6.2", - "vite": "5.4.6", - "vitest": "2.1.1" - }, - "engines": { - "node": "20", - "npm": ">=9" - } - }, - "packages/contract/node_modules/@polkadot/api": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.13.1.tgz", - "integrity": "sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/api-augment": "10.13.1", - "@polkadot/api-base": "10.13.1", - "@polkadot/api-derive": "10.13.1", - "@polkadot/keyring": "^12.6.2", - "@polkadot/rpc-augment": "10.13.1", - "@polkadot/rpc-core": "10.13.1", - "@polkadot/rpc-provider": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/types-augment": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/types-create": "10.13.1", - "@polkadot/types-known": "10.13.1", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "eventemitter3": "^5.0.1", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, "packages/database": { "name": "@prosopo/database", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", "express": "4.21.1", "mongodb": "6.9.0", "mongodb-memory-server": "10.0.0", @@ -21550,17 +22028,17 @@ }, "packages/datasets": { "name": "@prosopo/datasets", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/util": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -21579,15 +22057,15 @@ }, "packages/datasets-fs": { "name": "@prosopo/datasets-fs", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@noble/hashes": "1.5.0", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "bcrypt": "5.1.1", "cli-progress": "3.12.0", "express": "4.21.1", @@ -21596,7 +22074,7 @@ "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/bcrypt": "5.0.2", "@types/cli-progress": "3.11.6", "@vitest/coverage-v8": "2.1.1", @@ -21617,7 +22095,7 @@ }, "packages/detector": { "name": "@prosopo/detector", - "version": "2.2.3", + "version": "2.3.0", "dependencies": { "express": "4.21.1" }, @@ -21639,11 +22117,11 @@ }, "packages/dotenv": { "name": "@prosopo/dotenv", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1" }, @@ -21665,22 +22143,22 @@ }, "packages/env": { "name": "@prosopo/env", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/database": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", - "@prosopo/types-env": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/database": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", + "@prosopo/types-env": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -21698,17 +22176,17 @@ }, "packages/file-server": { "name": "@prosopo/file-server", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/util": "2.2.3", + "@prosopo/util": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1", "node-fetch": "3.3.2", "sharp": "0.33.5" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/express": "4.17.21", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", @@ -21746,7 +22224,7 @@ }, "packages/fingerprint": { "name": "@prosopo/fingerprint", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@fingerprintjs/fingerprintjs": "3.4.2", @@ -21768,14 +22246,42 @@ "npm": ">=9" } }, + "packages/keyring": { + "name": "@prosopo/keyring", + "version": "2.3.0", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/keyring": "12.6.2", + "@polkadot/util": "12.6.2", + "@polkadot/util-crypto": "12.6.2", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0" + }, + "devDependencies": { + "@prosopo/config": "2.3.0", + "@vitest/coverage-v8": "2.1.1", + "concurrently": "9.0.1", + "del-cli": "6.0.0", + "npm-run-all": "2.1.0", + "tslib": "2.7.0", + "tsx": "4.19.1", + "typescript": "5.6.2", + "vite": "5.4.6", + "vitest": "2.1.1" + }, + "engines": { + "node": "20", + "npm": ">=9" + } + }, "packages/load-balancer": { "name": "@prosopo/load-balancer", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/types": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/types": "2.3.0", "express": "4.21.1" }, "devDependencies": { @@ -21796,7 +22302,7 @@ }, "packages/locale": { "name": "@prosopo/locale", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "express": "4.21.1", @@ -21806,7 +22312,7 @@ "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "del-cli": "6.0.0", "dotenv": "16.4.5", @@ -21824,17 +22330,17 @@ }, "packages/locale-browser": { "name": "@prosopo/locale-browser", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/locale": "2.2.3", + "@prosopo/locale": "2.3.0", "express": "4.21.1", "i18next-browser-languagedetector": "7.2.1", "react-i18next": "11.18.6", "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "del-cli": "6.0.0", "dotenv": "16.4.5", @@ -21852,26 +22358,26 @@ }, "packages/procaptcha": { "name": "@prosopo/procaptcha", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/api": "10.13.1", "@polkadot/api-contract": "10.13.1", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/account": "2.2.3", - "@prosopo/api": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/datasets": "2.2.3", - "@prosopo/load-balancer": "2.2.3", - "@prosopo/procaptcha-common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/account": "2.3.0", + "@prosopo/api": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/datasets": "2.3.0", + "@prosopo/load-balancer": "2.3.0", + "@prosopo/procaptcha-common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1", "jsdom": "25.0.0" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -21890,22 +22396,22 @@ }, "packages/procaptcha-bundle": { "name": "@prosopo/procaptcha-bundle", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/dotenv": "2.2.3", - "@prosopo/locale": "2.2.3", - "@prosopo/procaptcha-frictionless": "2.2.3", - "@prosopo/procaptcha-pow": "2.2.3", - "@prosopo/procaptcha-react": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/dotenv": "2.3.0", + "@prosopo/locale": "2.3.0", + "@prosopo/procaptcha-frictionless": "2.3.0", + "@prosopo/procaptcha-pow": "2.3.0", + "@prosopo/procaptcha-react": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1", "react": "18.3.1", "react-dom": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/jsdom": "21.1.7", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", @@ -21924,17 +22430,17 @@ }, "packages/procaptcha-common": { "name": "@prosopo/procaptcha-common", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/load-balancer": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/load-balancer": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -21952,20 +22458,20 @@ }, "packages/procaptcha-frictionless": { "name": "@prosopo/procaptcha-frictionless", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/detector": "2.2.3", - "@prosopo/locale-browser": "2.2.3", - "@prosopo/procaptcha-pow": "2.2.3", - "@prosopo/procaptcha-react": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/web-components": "2.2.3", + "@prosopo/detector": "2.3.0", + "@prosopo/locale-browser": "2.3.0", + "@prosopo/procaptcha-pow": "2.3.0", + "@prosopo/procaptcha-react": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/web-components": "2.3.0", "express": "4.21.1", "react": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -21983,24 +22489,24 @@ }, "packages/procaptcha-pow": { "name": "@prosopo/procaptcha-pow", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/util": "12.6.2", - "@prosopo/account": "2.2.3", - "@prosopo/api": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/locale-browser": "2.2.3", - "@prosopo/procaptcha": "2.2.3", - "@prosopo/procaptcha-common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", - "@prosopo/web-components": "2.2.3", + "@prosopo/account": "2.3.0", + "@prosopo/api": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/locale-browser": "2.3.0", + "@prosopo/procaptcha": "2.3.0", + "@prosopo/procaptcha-common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", + "@prosopo/web-components": "2.3.0", "express": "4.21.1", "react": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -22018,22 +22524,22 @@ }, "packages/procaptcha-react": { "name": "@prosopo/procaptcha-react", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/locale-browser": "2.2.3", - "@prosopo/procaptcha": "2.2.3", - "@prosopo/procaptcha-common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", - "@prosopo/web-components": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/locale-browser": "2.3.0", + "@prosopo/procaptcha": "2.3.0", + "@prosopo/procaptcha-common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", + "@prosopo/web-components": "2.3.0", "csstype": "3.1.3", "express": "4.21.1", "react": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -22079,23 +22585,23 @@ }, "packages/provider": { "name": "@prosopo/provider", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@noble/hashes": "1.5.0", "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/contract": "2.2.3", - "@prosopo/database": "2.2.3", - "@prosopo/datasets": "2.2.3", - "@prosopo/env": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", - "@prosopo/types-env": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/database": "2.3.0", + "@prosopo/datasets": "2.3.0", + "@prosopo/env": "2.3.0", + "@prosopo/keyring": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", + "@prosopo/types-env": "2.3.0", + "@prosopo/util": "2.3.0", "cron": "3.1.7", "express": "4.21.1", "ip-address": "10.0.1", @@ -22142,19 +22648,19 @@ }, "packages/server": { "name": "@prosopo/server", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", - "@prosopo/api": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/contract": "2.2.3", - "@prosopo/types": "2.2.3", + "@prosopo/api": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/keyring": "2.3.0", + "@prosopo/types": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -22170,88 +22676,21 @@ "npm": ">=9" } }, - "packages/tx": { - "name": "@prosopo/tx", - "version": "2.2.3", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/api": "10.13.1", - "@polkadot/api-augment": "10.13.1", - "@polkadot/api-contract": "10.13.1", - "@polkadot/keyring": "12.6.2", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "express": "4.21.1" - }, - "devDependencies": { - "@prosopo/config": "2.2.3", - "@vitest/coverage-v8": "2.1.1", - "concurrently": "9.0.1", - "del-cli": "6.0.0", - "npm-run-all": "2.1.0", - "tslib": "2.7.0", - "tsx": "4.19.1", - "typescript": "5.6.2", - "vite": "5.4.6", - "vitest": "2.1.1" - }, - "engines": { - "node": "20", - "npm": ">=9" - } - }, - "packages/tx/node_modules/@polkadot/api": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.13.1.tgz", - "integrity": "sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/api-augment": "10.13.1", - "@polkadot/api-base": "10.13.1", - "@polkadot/api-derive": "10.13.1", - "@polkadot/keyring": "^12.6.2", - "@polkadot/rpc-augment": "10.13.1", - "@polkadot/rpc-core": "10.13.1", - "@polkadot/rpc-provider": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/types-augment": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/types-create": "10.13.1", - "@polkadot/types-known": "10.13.1", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "eventemitter3": "^5.0.1", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, "packages/types": { "name": "@prosopo/types", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@polkadot/api": "10.13.1", - "@polkadot/api-contract": "10.13.1", "@polkadot/extension-inject": "0.46.9", - "@polkadot/keyring": "12.6.2", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/locale": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/locale": "2.3.0", "express": "4.21.1", "ip-address": "10.0.1", "scale-ts": "1.6.0", "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", @@ -22270,18 +22709,18 @@ }, "packages/types-database": { "name": "@prosopo/types-database", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", "express": "4.21.1", "mongodb": "6.9.0", "mongoose": "8.6.2", "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -22299,17 +22738,17 @@ }, "packages/types-env": { "name": "@prosopo/types-env", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@polkadot/keyring": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -22325,41 +22764,13 @@ "npm": ">=9" } }, - "packages/types/node_modules/@polkadot/api": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.13.1.tgz", - "integrity": "sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/api-augment": "10.13.1", - "@polkadot/api-base": "10.13.1", - "@polkadot/api-derive": "10.13.1", - "@polkadot/keyring": "^12.6.2", - "@polkadot/rpc-augment": "10.13.1", - "@polkadot/rpc-core": "10.13.1", - "@polkadot/rpc-provider": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/types-augment": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/types-create": "10.13.1", - "@polkadot/types-known": "10.13.1", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "eventemitter3": "^5.0.1", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, "packages/util": { "name": "@prosopo/util", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@noble/hashes": "1.5.0", - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1", "lodash": "4.17.21", @@ -22385,7 +22796,7 @@ }, "packages/web-components": { "name": "@prosopo/web-components", - "version": "2.2.3", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@emotion/react": "11.13.3", @@ -22394,7 +22805,7 @@ "react": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/package.json b/package.json index a358c3dc8e..6d21885724 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/captcha", - "version": "2.2.3", + "version": "2.3.0", "author": "Prosopo", "type": "module", "repository": { diff --git a/packages/account/package.json b/packages/account/package.json index f81ea0a5cf..e058ffd469 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/account", - "version": "2.2.3", + "version": "2.3.0", "description": "Services and Utils for Prosopo account gen and management", "main": "dist/index.js", "type": "module", @@ -37,15 +37,15 @@ "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/fingerprint": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/fingerprint": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1", "react": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/account/src/extension/ExtensionWeb2.ts b/packages/account/src/extension/ExtensionWeb2.ts index b5b961282f..61344fc43b 100644 --- a/packages/account/src/extension/ExtensionWeb2.ts +++ b/packages/account/src/extension/ExtensionWeb2.ts @@ -12,23 +12,25 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { default as Signer } from "@polkadot/extension-base/page/Signer"; import type { InjectedAccount } from "@polkadot/extension-inject/types"; import type { InjectedExtension } from "@polkadot/extension-inject/types"; -import { Keyring } from "@polkadot/keyring"; import type { KeyringPair } from "@polkadot/keyring/types"; import { cryptoWaitReady } from "@polkadot/util-crypto"; -import { entropyToMnemonic } from "@polkadot/util-crypto/mnemonic/bip39"; import type { KeypairType } from "@polkadot/util-crypto/types"; import { stringToU8a } from "@polkadot/util/string"; import { u8aToHex } from "@polkadot/util/u8a"; import { hexHash } from "@prosopo/common"; import { getFingerprint } from "@prosopo/fingerprint"; import type { Account, ProcaptchaClientConfigOutput } from "@prosopo/types"; -import { picassoCanvas } from "@prosopo/util"; import { version } from "@prosopo/util"; import { Extension } from "./Extension.js"; +const SignerLoader = async () => + (await import("@polkadot/extension-base/page/Signer")).default; +const KeyringLoader = async () => (await import("@polkadot/keyring")).Keyring; +const EntropyToMnemonicLoader = async () => + (await import("@polkadot/util-crypto/mnemonic/bip39")).entropyToMnemonic; + type AccountWithKeyPair = InjectedAccount & { keypair: KeyringPair }; /** @@ -50,6 +52,7 @@ export class ExtensionWeb2 extends Extension { private async createExtension( account: AccountWithKeyPair, ): Promise { + const Signer = await SignerLoader(); const signer = new Signer(async () => { return; }); @@ -86,27 +89,11 @@ export class ExtensionWeb2 extends Extension { config: ProcaptchaClientConfigOutput, ): Promise { await cryptoWaitReady(); - const params = { - area: { width: 300, height: 300 }, - offsetParameter: 2001000001, - multiplier: 15000, - fontSizeFactor: 1.5, - maxShadowBlur: 50, - numberOfRounds: 5, - seed: 42, - }; - + const Keyring = await KeyringLoader(); const browserEntropy = await getFingerprint(); - const canvasEntropy = picassoCanvas( - params.numberOfRounds, - params.seed, - params, - ); - const entropy = hexHash( - [canvasEntropy, browserEntropy].join(""), - 128, - ).slice(2); + const entropy = hexHash(browserEntropy, 128).slice(2); const u8Entropy = stringToU8a(entropy); + const entropyToMnemonic = await EntropyToMnemonicLoader(); const mnemonic = entropyToMnemonic(u8Entropy); const type: KeypairType = "sr25519"; const keyring = new Keyring({ diff --git a/packages/account/src/extension/ExtensionWeb3.ts b/packages/account/src/extension/ExtensionWeb3.ts index c042fbc0b6..3ba7de3f9e 100644 --- a/packages/account/src/extension/ExtensionWeb3.ts +++ b/packages/account/src/extension/ExtensionWeb3.ts @@ -1,6 +1,3 @@ -import { web3Enable } from "@polkadot/extension-dapp"; -import type { InjectedExtension } from "@polkadot/extension-inject/types"; -import { ProsopoError } from "@prosopo/common"; // Copyright 2021-2024 Prosopo (UK) Ltd. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,9 +11,15 @@ import { ProsopoError } from "@prosopo/common"; // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + +import type { InjectedExtension } from "@polkadot/extension-inject/types"; +import { ProsopoError } from "@prosopo/common"; import type { Account, ProcaptchaClientConfigOutput } from "@prosopo/types"; import { Extension } from "./Extension.js"; +const web3Loader = async () => + (await import("@polkadot/extension-dapp")).web3Enable; + /** * Class for interfacing with web3 accounts. */ @@ -33,6 +36,7 @@ export class ExtensionWeb3 extends Extension { } // enable access to all extensions + const web3Enable = await web3Loader(); const extensions: InjectedExtension[] = await web3Enable(dappName); if (extensions.length === 0) { throw new ProsopoError("WIDGET.NO_EXTENSION_FOUND"); diff --git a/packages/api/package.json b/packages/api/package.json index 110c4e2fdf..f279626c4b 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/api", - "version": "2.2.3", + "version": "2.3.0", "description": "Wrapper for the provider API", "main": "dist/index.js", "type": "module", @@ -31,11 +31,11 @@ }, "homepage": "https://github.com/prosopo/captcha#readme", "dependencies": { - "@prosopo/types": "2.2.3", + "@prosopo/types": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/cli/package.json b/packages/cli/package.json index e1821e31ca..779251ec86 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/cli", - "version": "2.2.3", + "version": "2.3.0", "description": "CLI for Prosopo Provider", "main": "dist/index.js", "type": "module", @@ -29,16 +29,16 @@ "@polkadot/keyring": "12.6.2", "@polkadot/types-codec": "10.13.1", "@polkadot/util-crypto": "12.6.2", - "@prosopo/api": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/contract": "2.2.3", - "@prosopo/dotenv": "2.2.3", - "@prosopo/env": "2.2.3", - "@prosopo/locale": "2.2.3", - "@prosopo/provider": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/api": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/dotenv": "2.3.0", + "@prosopo/env": "2.3.0", + "@prosopo/keyring": "2.3.0", + "@prosopo/locale": "2.3.0", + "@prosopo/provider": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "cors": "2.8.5", "cron-parser": "4.9.0", "dotenv": "16.4.5", @@ -47,7 +47,7 @@ "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/cors": "2.8.17", "@types/yargs": "17.0.33", "@vitest/coverage-v8": "2.1.1", diff --git a/packages/cli/src/RateLimiter.ts b/packages/cli/src/RateLimiter.ts index 823fcbf8f9..600d0384a1 100644 --- a/packages/cli/src/RateLimiter.ts +++ b/packages/cli/src/RateLimiter.ts @@ -59,5 +59,21 @@ export const getRateLimitConfig = () => { windowMs: process.env.PROSOPO_GET_FR_CAPTCHA_CHALLENGE_WINDOW, limit: process.env.PROSOPO_GET_FR_CAPTCHA_CHALLENGE_LIMIT, }, + [AdminApiPaths.BlockRuleIPAdd]: { + windowMs: process.env.PROSOPO_BLOCK_RULE_IP_ADD_WINDOW, + limit: process.env.PROSOPO_BLOCK_RULE_IP_ADD_LIMIT, + }, + [AdminApiPaths.BlockRuleIPRemove]: { + windowMs: process.env.PROSOPO_BLOCK_RULE_IP_REMOVE_WINDOW, + limit: process.env.PROSOPO_BLOCK_RULE_IP_REMOVE_LIMIT, + }, + [AdminApiPaths.BlocKRuleUserAdd]: { + windowMs: process.env.PROSOPO_BLOCK_RULE_USER_ADD_WINDOW, + limit: process.env.PROSOPO_BLOCK_RULE_USER_ADD_LIMIT, + }, + [AdminApiPaths.BlockRuleUserRemove]: { + windowMs: process.env.PROSOPO_BLOCK_RULE_USER_REMOVE_WINDOW, + limit: process.env.PROSOPO_BLOCK_RULE_USER_REMOVE_LIMIT, + }, }; }; diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index c9993c9c6b..d2234009d4 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -13,8 +13,8 @@ // limitations under the License. import process from "node:process"; import { LogLevel, getLogger } from "@prosopo/common"; -import { getPairAsync } from "@prosopo/contract"; import { loadEnv } from "@prosopo/dotenv"; +import { getPairAsync } from "@prosopo/keyring"; import type { ProsopoConfigOutput } from "@prosopo/types"; import { isMain } from "@prosopo/util"; import { processArgs } from "./argv.js"; diff --git a/packages/cli/src/commands/addBlockRules.ts b/packages/cli/src/commands/addBlockRules.ts index 0921c3811c..376baba338 100644 --- a/packages/cli/src/commands/addBlockRules.ts +++ b/packages/cli/src/commands/addBlockRules.ts @@ -16,10 +16,13 @@ import type { KeyringPair } from "@polkadot/keyring/types"; import { LogLevel, type Logger, getLogger } from "@prosopo/common"; import { ProviderEnvironment } from "@prosopo/env"; import { Tasks } from "@prosopo/provider"; -import type { CaptchaConfig, ProsopoConfigOutput } from "@prosopo/types"; +import { + AddBlockRulesIPSpec, + AddBlockRulesUserSpec, + type ProsopoCaptchaCountConfigSchemaOutput, + type ProsopoConfigOutput, +} from "@prosopo/types"; import type { ArgumentsCamelCase, Argv } from "yargs"; -import * as z from "zod"; -import { loadJSONFile } from "../files.js"; export default ( pair: KeyringPair, @@ -78,7 +81,7 @@ export default ( const env = new ProviderEnvironment(config, pair); await env.isReady(); const tasks = new Tasks(env); - let captchaConfig: CaptchaConfig | undefined; + let captchaConfig: ProsopoCaptchaCountConfigSchemaOutput | undefined; if (argv.solved) { captchaConfig = { solved: { @@ -92,23 +95,32 @@ export default ( if (argv.ips) { await tasks.clientTaskManager.addIPBlockRules( - argv.ips as unknown as string[], - argv.global as boolean, - argv.hardBlock as boolean, - argv.dapp as unknown as string, - captchaConfig, + AddBlockRulesIPSpec.parse([ + { + ips: argv.ips, + global: argv.global, + hardBlock: argv.hardBlock, + dapp: argv.dapp, + captchaConfig, + }, + ]), ); + logger.info("IP Block rules added"); } if (argv.users) { await tasks.clientTaskManager.addUserBlockRules( - argv.users as unknown as string[], - argv.hardBlock as boolean, - argv.global as boolean, - argv.dapp as unknown as string, - captchaConfig, + AddBlockRulesUserSpec.parse([ + { + users: argv.users, + global: argv.global, + hardBlock: argv.hardBlock, + dapp: argv.dapp, + captchaConfig, + }, + ]), ); + logger.info("User Block rules added"); } - logger.info("IP Block rules added"); } catch (err) { logger.error(err); } diff --git a/packages/cli/src/process.env.ts b/packages/cli/src/process.env.ts index 6d01dbc14a..b69167ff11 100644 --- a/packages/cli/src/process.env.ts +++ b/packages/cli/src/process.env.ts @@ -11,6 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + import type { KeypairType } from "@polkadot/util-crypto/types"; import { ProsopoEnvError } from "@prosopo/common"; diff --git a/packages/cli/src/start.ts b/packages/cli/src/start.ts index 4eac566774..7a5dc823c9 100644 --- a/packages/cli/src/start.ts +++ b/packages/cli/src/start.ts @@ -13,9 +13,9 @@ // limitations under the License. import type { Server } from "node:net"; -import { getPairAsync } from "@prosopo/contract"; import { loadEnv } from "@prosopo/dotenv"; import { ProviderEnvironment } from "@prosopo/env"; +import { getPairAsync } from "@prosopo/keyring"; import { i18nMiddleware } from "@prosopo/locale"; import { domainMiddleware, diff --git a/packages/cli/tsconfig.cjs.json b/packages/cli/tsconfig.cjs.json index 0d98ae5309..7b15b20b55 100644 --- a/packages/cli/tsconfig.cjs.json +++ b/packages/cli/tsconfig.cjs.json @@ -12,15 +12,16 @@ { "path": "../common/tsconfig.cjs.json" }, - { - "path": "../contract/tsconfig.cjs.json" - }, + { "path": "../dotenv/tsconfig.cjs.json" }, { "path": "../env/tsconfig.cjs.json" }, + { + "path": "../keyring/tsconfig.cjs.json" + }, { "path": "../locale/tsconfig.cjs.json" }, diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 50175b8b5c..9f12888238 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -13,15 +13,16 @@ { "path": "../common" }, - { - "path": "../contract" - }, + { "path": "../dotenv" }, { "path": "../env" }, + { + "path": "../keyring" + }, { "path": "../locale" }, diff --git a/packages/common/package.json b/packages/common/package.json index ab7aa01cc9..65375c11f7 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/common", - "version": "2.2.3", + "version": "2.3.0", "description": "Prosopo common library", "main": "./dist/index.js", "type": "module", @@ -25,13 +25,13 @@ "license": "Apache-2.0", "dependencies": { "@polkadot/util-crypto": "12.6.2", - "@prosopo/locale": "2.2.3", + "@prosopo/locale": "2.3.0", "consola": "3.2.3", "express": "4.21.1", "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/contract/.npmignore b/packages/contract/.npmignore deleted file mode 100644 index 5248cae047..0000000000 --- a/packages/contract/.npmignore +++ /dev/null @@ -1,17 +0,0 @@ -/node_modules/ -/src/ -/tests/ -/artifacts/ -tsconfig.json -tsconfig.*.json -tsconfig.tsbuildinfo -env.production -env.development -env.test -.env.* -webpack.* -*.ipynb -captchas_*.json -data.json -stl10/*.json -stl10 diff --git a/packages/contract/README.md b/packages/contract/README.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/contract/package.json b/packages/contract/package.json deleted file mode 100644 index 147a7f5430..0000000000 --- a/packages/contract/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "@prosopo/contract", - "version": "2.2.3", - "author": "PROSOPO LIMITED ", - "license": "Apache-2.0", - "scripts": { - "test": "echo \"No test specified\"", - "clean": "tsc --build --clean", - "build": "tsc --build --verbose", - "build:cjs": "npx vite --config vite.cjs.config.ts build" - }, - "type": "module", - "engines": { - "node": "20", - "npm": ">=9" - }, - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "files": ["dist"], - "exports": { - ".": { - "import": "./dist/index.js", - "require": "./dist/cjs/index.cjs" - }, - "./contract/interface": { - "types": "./dist/contract/interface.d.ts", - "import": "./dist/contract/interface.js", - "require": "./dist/cjs/contract/interface.cjs", - "default": "./dist/contract/interface.js" - } - }, - "typesVersions": { - "*": { - "types": ["dist/types"], - "captcha": ["dist/captcha"] - } - }, - "dependencies": { - "@polkadot/api": "10.13.1", - "@polkadot/api-contract": "10.13.1", - "@polkadot/keyring": "12.6.2", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/tx": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", - "express": "4.21.1", - "rxjs": "7.8.1" - }, - "devDependencies": { - "@polkadot/api-augment": "10.13.1", - "@prosopo/config": "2.2.3", - "@vitest/coverage-v8": "2.1.1", - "concurrently": "9.0.1", - "del-cli": "6.0.0", - "npm-run-all": "2.1.0", - "tslib": "2.7.0", - "tsx": "4.19.1", - "typescript": "5.6.2", - "vite": "5.4.6", - "vitest": "2.1.1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/prosopo/captcha.git" - }, - "bugs": { - "url": "https://github.com/prosopo/captcha/issues" - }, - "homepage": "https://github.com/prosopo/captcha#readme", - "publishConfig": { - "registry": "https://registry.npmjs.org" - }, - "description": "", - "sideEffects": false -} diff --git a/packages/contract/src/contract/batch.ts b/packages/contract/src/contract/batch.ts deleted file mode 100644 index 5fd09a953c..0000000000 --- a/packages/contract/src/contract/batch.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { ContractPromise } from "@polkadot/api-contract/promise"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import type { SubmittableResult } from "@polkadot/api/submittable"; -import type { SubmittableExtrinsic } from "@polkadot/api/types"; -import type { DispatchError, Event } from "@polkadot/types/interfaces"; -import type { IKeyringPair, SignatureOptions } from "@polkadot/types/types"; -import { type Logger, ProsopoContractError } from "@prosopo/common"; -import { getDispatchError } from "@prosopo/tx"; -import { oneUnit } from "@prosopo/tx"; -import { at } from "@prosopo/util"; -import { filterAndDecodeContractEvents, formatEvent } from "./helpers.js"; - -/** - * Batch commits an array of transactions to the contract - * @param contract - * @param pair - * @param extrinsics - * @param logger - */ -export async function batch( - contract: ContractPromise, - pair: IKeyringPair, - // biome-ignore lint/suspicious/noExplicitAny: TODO fix any - extrinsics: SubmittableExtrinsic[], - logger: Logger, -): Promise { - // TODO use dryRun to get weight - // const result = await contract.api.tx.utility.batchAll(txs).dryRun(contract.pair) - // 2023-02-01 21:23:51 RPC-CORE: dryRun(extrinsic: Bytes, at?: BlockHash): ApplyExtrinsicResult:: -32601: RPC call is unsafe to be called externally - // - // ERROR -32601: RPC call is unsafe to be called externally 21:23:51 - //if (result.isOk) { - - const nonce = ( - await contract.api.rpc.system.accountNextIndex(pair.address) - ).toNumber(); - const genesisHash = await contract.api.rpc.chain.getBlockHash(0); - const blockHash = await contract.api.rpc.chain.getBlockHash(); - const runtimeVersion = - await contract.api.rpc.state.getRuntimeVersion(blockHash); - - const options: SignatureOptions = { - nonce: nonce, - tip: 0, - genesisHash, - blockHash, - runtimeVersion, - }; - const batchExtrinsic = contract.api.tx.utility.batch(extrinsics); - const balance = await contract.api.query.system.account(pair.address); - const paymentInfo = await batchExtrinsic.paymentInfo(pair); - logger.info( - "Sender balance Before", - balance.data.free.div(oneUnit(contract.api as ApiPromise)).toString(), - "UNIT", - ); - logger.info("Payment Info", paymentInfo.toHuman()); - // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO fix - return await new Promise(async (resolve, reject) => { - const unsub = await batchExtrinsic.signAndSend( - pair, - options, - async (result: SubmittableResult) => { - //logger.debug('DispatchInfo', result.dispatchInfo?.toHuman()) - - const batchInterruptedEvent = result.events.filter( - (e) => e.event.method === "BatchInterrupted", - ); - const tooManyCallsEvent = result.events.filter( - (e) => e.event.method === "TooManyCalls", - ); - const extrinsicSuccess = result.events.filter( - (e) => e.event.method === "ExtrinsicSuccess", - ); - if (tooManyCallsEvent.length > 0) { - logger.error("Too many calls"); - const item = at(tooManyCallsEvent, 0); - const message = formatEvent(item.event); - reject( - new ProsopoContractError("CONTRACT.TOO_MANY_CALLS", { - context: { message }, - }), - ); - } - - if (batchInterruptedEvent.length > 0) { - logger.error("Batch interrupted"); - const item = at(batchInterruptedEvent, 0); - const message = formatBatchInterruptedEvent(item.event); - reject( - new ProsopoContractError("CONTRACT.INTERRUPTED_EVENT", { - context: { message }, - }), - ); - } - - if (result.status.isFinalized || result.status.isInBlock) { - unsub(); - const events = filterAndDecodeContractEvents( - result, - contract.abi, - logger, - ); - const item = at(extrinsicSuccess, 0); - logger.debug( - "extrinsicSuccess", - JSON.stringify(item.toHuman(), null, 4), - ); - logger.debug("block number", result.blockNumber?.toString()); - logger.debug("events", events); - const balance = await contract.api.query.system.account(pair.address); - logger.info( - "Sender balance After", - balance.data.free - .div(oneUnit(contract.api as ApiPromise)) - .toString(), - "UNIT", - ); - resolve(); - } else if (result.isError) { - unsub(); - reject( - new ProsopoContractError("CONTRACT.TX_ERROR", { - context: { resultType: result.status.type }, - logger, - }), - ); - } - }, - ); - }); -} - -// Get the error from inside the batch interrupted event -function formatBatchInterruptedEvent({ data: [index, error] }: Event): string { - const err = index === undefined ? "unknown" : index.toString(); - return `error: ${err}: ${getDispatchError(error as DispatchError)}`; -} diff --git a/packages/contract/src/contract/block.ts b/packages/contract/src/contract/block.ts deleted file mode 100644 index fcbca25e26..0000000000 --- a/packages/contract/src/contract/block.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import { BN } from "@polkadot/util/bn"; - -/** - * Get the current block time in milliseconds - */ -export const getBlockTimeMs = (api: ApiPromise): number => { - const babe = api.consts.babe; - const blockTime = babe ? babe.expectedBlockTime : new BN(6000); - return blockTime.toNumber(); -}; - -/** - * Get the current block number - */ -export const getCurrentBlockNumber = async ( - api: ApiPromise, -): Promise => { - return (await api.rpc.chain.getBlock()).block.header.number.toNumber(); -}; diff --git a/packages/contract/src/contract/deploy.ts b/packages/contract/src/contract/deploy.ts deleted file mode 100644 index 70abda4236..0000000000 --- a/packages/contract/src/contract/deploy.ts +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { Abi } from "@polkadot/api-contract/Abi"; -import { CodeSubmittableResult } from "@polkadot/api-contract/base"; -import { ContractSubmittableResult } from "@polkadot/api-contract/base/Contract"; -import { CodePromise } from "@polkadot/api-contract/promise"; -import type { BlueprintOptions } from "@polkadot/api-contract/types"; -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import type { SubmittableExtrinsic } from "@polkadot/api/types"; -import type { KeyringPair } from "@polkadot/keyring/types"; -import type { ISubmittableResult } from "@polkadot/types/types"; -import { BN, BN_ZERO } from "@polkadot/util/bn"; -import { - LogLevel, - type Logger, - ProsopoContractError, - getLogger, -} from "@prosopo/common"; -import type { TransactionQueue } from "@prosopo/tx"; -import type { UseWeight } from "@prosopo/types"; -import { dispatchErrorHandler, getOptions } from "./helpers.js"; -import { getWeight } from "./useWeight.js"; - -interface DryRunResult { - contract: null | SubmittableExtrinsic<"promise">; - error: null | string; -} - -export class ContractDeployer { - private api: ApiPromise; - private abi: Abi; - private wasm: Uint8Array; - private readonly code: CodePromise; - private readonly pair: KeyringPair; - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - private readonly params: any[]; - private readonly constructorIndex: number; - private readonly value: number; - private readonly logger: Logger; - private readonly salt: string | undefined; - private readonly transactionQueue: TransactionQueue | undefined; - - constructor( - api: ApiPromise, - abi: Abi, - wasm: Uint8Array, - pair: KeyringPair, - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - params: any[] = [], - value = 0, - constructorIndex = 0, - salt?: string, - logLevel?: LogLevel, - transactionQueue?: TransactionQueue, - ) { - this.api = api; - this.abi = abi; - this.wasm = this.api.registry.createType("Raw", wasm); - this.pair = pair; - this.params = params; - this.constructorIndex = constructorIndex; - this.value = value; - this.salt = salt; - this.logger = getLogger(logLevel || LogLevel.enum.info, "ContractDeployer"); - this.code = new CodePromise(api, abi, wasm); - this.transactionQueue = transactionQueue; - } - - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - async deploy(): Promise> { - const weight = await getWeight(this.api); - const { contract, error } = await dryRunDeploy( - this.code, - this.api, - this.abi, - this.wasm, - this.pair, - this.params, - this.value, - weight, - this.constructorIndex, - this.salt, - this.logger.getLogLevel(), - ); - this.logger.debug("Weight", weight.weightV2?.toHuman()); - - const nonce = await this.api.rpc.system.accountNextIndex(this.pair.address); - - if (contract) { - if (this.transactionQueue) { - return new Promise((resolve, reject) => { - this.transactionQueue?.add( - contract, - (result: ISubmittableResult) => { - this.logger.info("Contract deployed by", this.pair.address); - resolve(new CodeSubmittableResult(result)); - }, - this.pair, - contract.method.method.toString(), - ); - }); - } - // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO fix - return new Promise(async (resolve, reject) => { - const unsub = await contract?.signAndSend( - this.pair, - { nonce }, - (result: ISubmittableResult) => { - if (result.status.isFinalized || result.status.isInBlock) { - // biome-ignore lint/complexity/noForEach: TODO fix - result.events - .filter( - ({ event: { section } }): boolean => section === "system", - ) - .forEach((event): void => { - const { - event: { method }, - } = event; - - if (method === "ExtrinsicFailed") { - unsub(); - reject(dispatchErrorHandler(this.api.registry, event)); - } - }); - - // ContractEmitted is the current generation, ContractExecution is the previous generation - unsub(); - resolve(new ContractSubmittableResult(result)); - } else if (result.isError) { - unsub(); - reject( - new ProsopoContractError("CONTRACT.UNKNOWN_ERROR", { - context: { - error: result.status.type, - deployer: this.pair.address, - }, - logLevel: this.logger.getLogLevel(), - }), - ); - } - }, - ); - }); - } - throw new ProsopoContractError("CONTRACT.UNKNOWN_ERROR", { - context: { error, deployer: this.pair.address }, - }); - } -} - -// Taken from apps/packages/page-contracts/src/Codes/Upload.tsx -export async function dryRunDeploy( - code: CodePromise, - api: ApiPromise, - contractAbi: Abi, - wasm: Uint8Array, - pair: KeyringPair, - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - params: any[], - value: number, - weight: UseWeight, - constructorIndex = 0, - salt?: string, - logLevel?: LogLevel, -): Promise { - const accountId = pair.address; - const logger = getLogger(logLevel || LogLevel.Values.info, "dryRunDeploy"); - let contract: SubmittableExtrinsic<"promise"> | null = null; - let error: string | null = null; - const saltOrNull = salt ? salt : null; - - try { - const message = contractAbi?.constructors[constructorIndex]; - if (message === undefined) { - throw new ProsopoContractError("CONTRACT.CONTRACT_UNDEFINED", { - context: { reason: "Unable to find constructor" }, - logLevel: logger.getLogLevel(), - }); - } - const method = message.method; - if (code && message && accountId) { - const dryRunParams: Parameters = - [ - pair.address, - message.isPayable - ? api.registry.createType("Balance", value) - : api.registry.createType("Balance", BN_ZERO), - weight.weightV2, - null, - { Upload: wasm }, - message.toU8a(params), - "", - ]; - - const dryRunResult = await api.call.contractsApi.instantiate( - ...dryRunParams, - ); - const func = code.tx[method]; - if (func === undefined) { - throw new ProsopoContractError("CONTRACT.INVALID_METHOD", { - context: { func }, - }); - } - const options: BlueprintOptions = getOptions( - api, - true, - new BN(value), - dryRunResult.gasRequired, - dryRunResult.storageDeposit, - true, - ); - options.salt = saltOrNull; - contract = func(options, ...params); - } - } catch (e) { - error = (e as Error).message; - } - - return { contract, error }; -} diff --git a/packages/contract/src/contract/helpers.ts b/packages/contract/src/contract/helpers.ts deleted file mode 100644 index 51d0e72bb4..0000000000 --- a/packages/contract/src/contract/helpers.ts +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { Abi } from "@polkadot/api-contract/Abi"; -import type { ContractSubmittableResult } from "@polkadot/api-contract/base/Contract"; -import type { - AbiMessage, - ContractCallOutcome, - ContractOptions, - DecodedEvent, -} from "@polkadot/api-contract/types"; -import type { SubmittableResult } from "@polkadot/api/submittable"; -import type { ApiBase } from "@polkadot/api/types"; -import type { Registry } from "@polkadot/types-codec/types/registry"; -import type { - AccountId, - DispatchError, - Event, - EventRecord, - StorageDeposit, - WeightV2, -} from "@polkadot/types/interfaces"; -import type { AnyJson } from "@polkadot/types/types/codec"; -import { BN, BN_ONE, BN_ZERO, bnFromHex } from "@polkadot/util/bn"; -import { isHex, isU8a } from "@polkadot/util/is"; -import { stringToHex } from "@polkadot/util/string"; -import { - type Logger, - ProsopoContractError, - capitaliseFirstLetter, -} from "@prosopo/common"; - -/** - * Get the event name from the contract method name - * Each of the ink contract methods returns an event with a capitalised version of the method name - * @return {string} event name - */ -export function getEventNameFromMethodName(contractMethodName: string): string { - return capitaliseFirstLetter(contractMethodName); -} - -/** - * Extract events given the contract method name - * - * @return {AnyJson} array of events filtered by calculated event name - */ -export function getEventsFromMethodName( - response: ContractSubmittableResult, - contractMethodName: string, - // biome-ignore lint/suspicious/noExplicitAny: TODO fix -): AnyJson | DecodedEvent[] | any { - const eventName = getEventNameFromMethodName(contractMethodName); - if (response?.contractEvents) { - return response?.contractEvents?.filter( - (x) => x.event.identifier === eventName, - ); - } - return []; -} - -/** Encodes arguments, padding and converting to hex if necessary - * the ABI types - * @return encoded arguments - */ - -export function encodeStringArgs( - abi: Abi, - methodObj: AbiMessage, - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - args: any[], -): Uint8Array[] { - const encodedArgs: Uint8Array[] = []; - // args must be in the same order as methodObj['args'] - const typesToHash = ["Hash"]; - methodObj.args.forEach((methodArg, idx) => { - let argVal = args[idx]; - // hash values that have been passed as strings - if ( - typesToHash.indexOf(methodArg.type.type) > -1 && - !(isU8a(argVal) || isHex(argVal)) - ) { - argVal = stringToHexPadded(argVal); // hashes must be 32 bytes long - } - encodedArgs.push( - abi.registry.createType(methodArg.type.type, argVal).toU8a(), - ); - }); - return encodedArgs; -} - -/** Get errors returned from contract queries - */ -export function getContractError( - response: ContractCallOutcome, -): string | undefined { - if (response.output) { - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - const out: any = response.output; - if (out.isOk) { - const responseOk = out.asOk; - if (responseOk.isErr) { - return responseOk.toPrimitive().err.toString(); - } - } - } - return "Error: Failed to get contract error"; -} - -/** Hash a string, padding with zeroes until its 32 bytes long - * @return {string} string - */ -export function stringToHexPadded(data: string): string { - const maxLength = 64; - if (data.length > maxLength) { - throw new ProsopoContractError("CONTRACT.INVALID_DATA_FORMAT", { - context: { - error: `stringToHexPadded: string length ${data.length} exceeds ${maxLength}`, - }, - }); - } - - const hexString = stringToHex(data).replace("0x", ""); - return `0x${Array(maxLength - hexString.length + 1).join("0")}${hexString}`; -} - -// TODO add test for this -export function decodeEvents( - contractAddress: AccountId, - records: EventRecord[], - abi: Abi, -): DecodedEvent[] | undefined { - return records - .filter(({ event }) => { - const data = event.toPrimitive().data; - if (Array.isArray(data)) { - return false; - } - if (!(data instanceof Object)) { - return false; - } - return ( - event.toPrimitive().section === "contracts" && - data.contracts === contractAddress.toString() - ); - }) - .map((record): DecodedEvent | null => { - try { - return abi.decodeEvent(record); - } catch (error) { - console.error(error); - return null; - } - }) - .filter((decoded): decoded is DecodedEvent => !!decoded); -} - -export function dispatchErrorHandler( - registry: Registry, - event: EventRecord, -): ProsopoContractError { - const dispatchError = event.event.data[0] as DispatchError; - let message: string = dispatchError.type; - - if (dispatchError.isModule) { - try { - const mod = dispatchError.asModule; - const error = registry.findMetaError( - new Uint8Array([ - mod.index.toNumber(), - bnFromHex(mod.error.toHex().slice(0, 4)).toNumber(), - ]), - ); - message = `${error.section}.${error.name}${ - Array.isArray(error.docs) - ? `(${error.docs.join("")})` - : error.docs || "" - }`; - } catch (error) { - // swallow - } - } - return new ProsopoContractError("CONTRACT.UNKNOWN_ERROR", { - context: { error: message, event: event.toHuman() }, - }); -} - -// 4_999_999_999_999 -const MAX_CALL_WEIGHT = new BN(5_000_000_000_000).isub(BN_ONE); - -// The values returned by the dry run transactions are sometimes not large enough -// to guarantee that the transaction will succeed. This is a safety margin to ensure -// that the transaction will succeed. -export const GAS_INCREASE_FACTOR = 2; - -export function getOptions( - api: ApiBase<"promise">, - isMutating?: boolean, - value?: BN, - gasLimit?: WeightV2, - storageDeposit?: StorageDeposit, - increaseGas?: boolean, - gasIncreaseFactor?: number, -): ContractOptions { - gasIncreaseFactor = increaseGas - ? gasIncreaseFactor || GAS_INCREASE_FACTOR - : 1; - const _gasLimit: WeightV2 | undefined = gasLimit - ? api.registry.createType("WeightV2", { - refTime: gasLimit.refTime.toBn().muln(gasIncreaseFactor), - proofSize: gasLimit.proofSize.toBn().muln(gasIncreaseFactor), - }) - : isMutating - ? (api.registry.createType("WeightV2", { - proofSize: new BN(1_000_000), - refTime: MAX_CALL_WEIGHT, - }) as WeightV2) - : undefined; - return { - gasLimit: _gasLimit, - storageDepositLimit: storageDeposit - ? storageDeposit.isCharge && storageDeposit.asCharge.gt(BN_ZERO) - ? storageDeposit.asCharge.toBn().muln(gasIncreaseFactor) - : storageDeposit.isRefund - ? storageDeposit.asRefund?.gt(BN_ZERO) - ? storageDeposit.asRefund.toBn().muln(gasIncreaseFactor) - : null - : null - : null, - value: value ? value.toString() : BN_ZERO, - } as ContractOptions; -} - -export function filterAndDecodeContractEvents( - result: SubmittableResult, - abi: Abi, - logger: Logger, -): DecodedEvent[] { - return result.events - .filter( - (e) => - e.event.section === "contracts" && - ["ContractEmitted", "ContractExecution"].indexOf(e.event.method) > -1, - ) - .map((eventRecord): DecodedEvent | null => { - const { - event: { - data: [, data], - }, - } = eventRecord; - try { - return abi.decodeEvent(eventRecord); - } catch (error) { - logger.error( - `Unable to decode contract event: ${(error as Error).message}`, - ); - logger.error(eventRecord.event.toHuman()); - - return null; - } - }) - .filter((decoded): decoded is DecodedEvent => !!decoded); -} - -export function formatEvent(event: Event): string { - return `${event.section}.${event.method}${ - "docs" in event - ? Array.isArray(event.docs) - ? `(${event.docs.join("")})` - : event.docs || "" - : "" - }`; -} diff --git a/packages/contract/src/contract/index.ts b/packages/contract/src/contract/index.ts deleted file mode 100644 index c9a46e3398..0000000000 --- a/packages/contract/src/contract/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -export * from "./block.js"; -export * from "./helpers.js"; -export * from "./useWeight.js"; -export * from "./deploy.js"; -export * from "./batch.js"; -export * from "./storage.js"; diff --git a/packages/contract/src/contract/storage.ts b/packages/contract/src/contract/storage.ts deleted file mode 100644 index 526edf7f49..0000000000 --- a/packages/contract/src/contract/storage.ts +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { Abi } from "@polkadot/api-contract/Abi"; -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import type { - AccountId, - PortableType, - StorageEntryMetadataLatest, -} from "@polkadot/types/interfaces"; -import { hexToNumber } from "@polkadot/util/hex"; -import { ProsopoContractError, reverseHexString } from "@prosopo/common"; -import type { AbiMetadata, AbiStorageField } from "@prosopo/types"; -import { at, get } from "@prosopo/util"; -import { firstValueFrom } from "rxjs"; - -const primitivesSizeInBytes: { - [key: string]: number; -} = { - u8: 1, // 2**0 - u16: 2, // 2**1 - u32: 4, // 2**2 - u64: 8, // 2**3 - u128: 16, // 2**4 - "[u8; 32]": 32, -}; - -export type PrimitiveTypes = { [key: number]: string }; - -export type PrimitiveStorageFields = { - [key: string]: { - storageType: string; - index: number; - startBytes: number; - lengthBytes: number; - }; -}; - -/** Get the primitive types from the abi.types section - * @return an object containing the primitive types, keyed on their IDs in the contract JSON - * @param abiJson - */ -export const getPrimitiveTypes = (abiJson: AbiMetadata): PrimitiveTypes => { - const primitiveTypes: { [key: number]: string } = {}; - const types = abiJson.types.filter((type) => { - if (type.type.def.primitive) { - return true; - } - if (type.type.path && type.type.path.length > 0) { - const path = Array.from(type.type.path) as string[]; - return at(path, 0).indexOf("primitive") > -1 && at(path, 1) === "types"; - } - return false; - }); - - for (const type of types) { - primitiveTypes[type.id] = type.type.def.primitive || ""; - } - return primitiveTypes; -}; - -/** Get the primitive storage fields from the abi.storage section of the contract JSON - * @return an object containing the primitive storage fields only, keyed on their names - * @param storageFields - * @param primitiveStorageTypes - */ -export const getPrimitiveStorageFields = ( - storageFields: AbiStorageField[], - primitiveStorageTypes: PrimitiveTypes, -): PrimitiveStorageFields => { - const filteredStorageFields: { - [key: string]: { - storageType: string; - index: number; - startBytes: number; - lengthBytes: number; - }; - } = {}; - let primitiveStorageIndex = 0; - let startBytes = 0; - for (const storageField of storageFields) { - const storageName = storageField.name; - if ( - storageField.layout && - storageField.layout.leaf && - storageField.layout.leaf.ty !== undefined - ) { - const type = storageField.layout.leaf.ty; - if (primitiveStorageTypes[type]) { - const typeNameAny = get(primitiveStorageTypes, type); - const typeName: string = typeNameAny.toString(); - const size = get(primitivesSizeInBytes, typeName); - filteredStorageFields[storageName] = { - storageType: typeName, - index: primitiveStorageIndex, - startBytes: startBytes, - lengthBytes: size, - }; - // Add the length of the primitive type to the startBytes - startBytes += size; - // Primitive values are stored in the contract under a single key in order of declaration - primitiveStorageIndex++; - } - } - } - return filteredStorageFields; -}; - -/** Get the storage entry from the ABI given a storage name - * @return the storage entry object - * @param api - * @param abi - * @param json - * @param storageName - */ -export function getStorageKeyAndType( - api: ApiPromise, - abi: Abi, - json: AbiMetadata, - storageName: string, -): { storageKey: `0x${string}`; storageType: PortableType } { - const { storageEntry } = getStorageEntry(json, storageName); - if (storageEntry) { - let storage = storageEntry; - while ("root" in storage.layout) { - storage = storage.layout.root; - } - const rootKey = storage.root_key || storage.layout.leaf.key || ""; - - // This is a primitive storage field (e.g. u16, u32, etc.) - if (hexToNumber(rootKey) === 0) { - const primitiveStorageTypes = getPrimitiveTypes(json); - if (storage.layout?.leaf?.ty) { - const type = storage.layout.leaf.ty; - if (primitiveStorageTypes[type]) { - return { - storageType: api.createType("PortableType", { - id: type, - type: primitiveStorageTypes[type], - }), - storageKey: rootKey, - }; - } - } - } - - const rootKeyReversed = reverseHexString(rootKey.slice(2)); - const item = at( - abi.registry.lookup.types, - Number.parseInt(storage.layout.leaf.ty), - ); - return { - storageType: item, - storageKey: rootKeyReversed, - }; - } - throw new ProsopoContractError("CONTRACT.INVALID_STORAGE_NAME", { - context: { failedFuncName: getStorageKeyAndType.name }, - }); -} - -/** Get the storage entry from the ABI given a storage name - * @return the storage entry object - * @param json - * @param storageName - */ -export function getStorageEntry( - json: AbiMetadata, - storageName: string, -): { - storageEntry?: StorageEntryMetadataLatest & AbiStorageField; - index?: number; -} { - const index = json.storage.root.layout.struct?.fields.findIndex( - (obj: { name: string }) => obj.name === storageName, - ); - if (index) { - return { - storageEntry: json.storage.root.layout.struct?.fields[index], - index, - }; - } - - return {}; -} - -/** - * Get the primitive storage value from the contract storage - * @param api - * @param abi - * @param name - * @param primitiveStorage - * @param address - */ -export async function getPrimitiveStorageValue( - api: ApiPromise, - abi: Abi, - name: string, - primitiveStorage: PrimitiveStorageFields, - address: AccountId, -): Promise { - // Primitive storage is packed together in the contract storage at key 0x00000000 - const promiseResult = api.rx.call.contractsApi.getStorage( - address, - "0x00000000", - ); - const result = await firstValueFrom(promiseResult); - const optionStorageBytes = abi.registry.createType("Option", result); - const storageBytes = optionStorageBytes.unwrap().toU8a(true); - // Remove first 4 bytes (0x00016101) - not sure what it is - const trimmedStorageBytes = storageBytes.slice(4, storageBytes.length); - // Extract the relevant bytes from the storageBytes - const storage = get(primitiveStorage, name); - const startBytes = storage.startBytes; - const endBytes = startBytes + storage.lengthBytes; - const primitiveBytes = trimmedStorageBytes.slice(startBytes, endBytes); - // Construct the type from the bytes - return abi.registry.createType(storage.storageType, primitiveBytes) as T; -} diff --git a/packages/contract/src/contract/useBlockInterval.ts b/packages/contract/src/contract/useBlockInterval.ts deleted file mode 100644 index e7cc4046ef..0000000000 --- a/packages/contract/src/contract/useBlockInterval.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// Taken from @polkadot/apps/packages/react-hooks/src/useBlockInterval.ts and -// modified to work in nodeJS environment - -// Copyright 2017-2023 @polkadot/react-hooks authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -// Some chains incorrectly use these, i.e. it is set to values such as 0 or even 2 -// Use a low minimum validity threshold to check these against -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import { BN, BN_THOUSAND, BN_TWO, bnMin } from "@polkadot/util/bn"; - -export const A_DAY = new BN(24 * 60 * 60 * 1000); -const THRESHOLD = BN_THOUSAND.div(BN_TWO); -const DEFAULT_TIME = new BN(6_000); - -export function calcInterval(api: ApiPromise): BN { - return bnMin( - A_DAY, - // Babe, e.g. Relay chains (Substrate defaults) - api.consts - ? api.consts.babe?.expectedBlockTime || - // POW, eg. Kulupu - api.consts.difficulty?.targetBlockTime || - // Subspace - api.consts.subspace?.expectedBlockTime || - // Check against threshold to determine value validity - (api.consts.timestamp?.minimumPeriod.gte(THRESHOLD) - ? // Default minimum period config - api.consts.timestamp.minimumPeriod.mul(BN_TWO) - : api.query.parachainSystem - ? // default guess for a parachain - DEFAULT_TIME.mul(BN_TWO) - : // default guess for others - DEFAULT_TIME) - : DEFAULT_TIME, - ); -} diff --git a/packages/contract/src/contract/useWeight.ts b/packages/contract/src/contract/useWeight.ts deleted file mode 100644 index 8000c67348..0000000000 --- a/packages/contract/src/contract/useWeight.ts +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Copyright 2017-2023 @polkadot/react-hooks authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -import { convertWeight } from "@polkadot/api-contract/base/util"; -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import type { Weight, WeightV2 } from "@polkadot/types/interfaces"; -import { BN } from "@polkadot/util/bn"; -import { BN_MILLION, BN_ONE, BN_TEN, BN_ZERO } from "@polkadot/util/bn"; -import type { UseWeight } from "@prosopo/types"; -import { calcInterval } from "./useBlockInterval.js"; - -export function useWeightImpl( - api: ApiPromise, - blockTime: BN, - scalingFactor: BN, -): Promise { - const isWeightV2 = !!api.registry.createType("Weight").proofSize; - const megaGas = convertWeight( - api.consts.system.blockWeights - ? api.consts.system.blockWeights.maxBlock - : (api.consts.system.maximumBlockWeight as Weight), - ) - .v1Weight.div(BN_MILLION) - .div(BN_TEN); - const megaRefTime = (api.consts.system.blockWeights - ? api.consts.system.blockWeights.perClass.normal.maxExtrinsic - .unwrapOrDefault() - // @ts-ignore - .refTime.toBn() - .div(BN_MILLION) - .div(BN_TEN) - : BN_ZERO); - const proofSize = (api.consts.system.blockWeights - ? // @ts-ignore - api.consts.system.blockWeights.perClass.normal.maxExtrinsic - .unwrapOrDefault() - .proofSize.toBn() - : BN_ZERO); - const isEmpty = false; - - return new Promise((resolve, reject) => { - let executionTime = 0; - let percentage = 0; - let weight = BN_ZERO; - let weightV2 = api.registry.createType("WeightV2", { - proofSize: BN_ZERO, - refTime: BN_ZERO, - }); - let isValid = false; - - if (megaGas) { - weight = megaGas.mul(BN_MILLION); - executionTime = weight - .mul(blockTime) - .div( - convertWeight( - // @ts-ignore - api.consts.system.blockWeights - ? // @ts-ignore - api.consts.system.blockWeights.maxBlock - : // @ts-ignore - (api.consts.system.maximumBlockWeight as Weight), - ).v1Weight, - ) - .toNumber(); - percentage = (executionTime / blockTime.toNumber()) * 100; - - // execution is 2s of 6s blocks, i.e. 1/3 - executionTime = executionTime / 3000; - isValid = !megaGas.isZero() && percentage < 65; - } - - if (isWeightV2 && megaRefTime && proofSize) { - weightV2 = api.registry.createType("WeightV2", { - proofSize: proofSize.div(scalingFactor), - refTime: megaRefTime.mul(BN_MILLION).div(scalingFactor), - }); - - executionTime = megaRefTime - .mul(BN_MILLION) - .mul(blockTime) - .div( - // @ts-ignore - api.consts.system.blockWeights - ? // @ts-ignore - api.consts.system.blockWeights.perClass.normal.maxExtrinsic - .unwrapOrDefault() - .refTime.toBn() - : BN_ONE, - ) - .toNumber(); - percentage = (executionTime / blockTime.toNumber()) * 100; - - // execution is 2s of 6s blocks, i.e. 1/3 - executionTime = executionTime / 3000; - isValid = !megaRefTime.isZero() && percentage < 65; - } - - resolve({ - executionTime, - isEmpty, - isValid: isEmpty || isValid, - isWeightV2, - megaGas: megaGas || BN_ZERO, - megaRefTime: megaRefTime || BN_ZERO, - percentage, - proofSize: proofSize || BN_ZERO, - weight, - // @ts-ignore - weightV2, - }); - }); -} - -export async function getWeight(api: ApiPromise): Promise { - const expectedBlockTime = calcInterval(api); - return await useWeightImpl(api as ApiPromise, expectedBlockTime, new BN(10)); -} diff --git a/packages/contract/src/index.ts b/packages/contract/src/index.ts deleted file mode 100644 index 6065fe9a5f..0000000000 --- a/packages/contract/src/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import "@polkadot/api-augment/substrate"; -export * from "./accounts/index.js"; -export * from "./contract/index.js"; diff --git a/packages/contract/tsconfig.cjs.json b/packages/contract/tsconfig.cjs.json deleted file mode 100644 index cf1317c713..0000000000 --- a/packages/contract/tsconfig.cjs.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "extends": "../../tsconfig.cjs.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist/cjs" - }, - "include": [ - "./src/**/*.ts", - "./src/**/*.json", - "./src/**/*.d.ts", - "./src/**/*.tsx" - ], - "references": [ - { - "path": "../common/tsconfig.cjs.json" - }, - { - "path": "../types/tsconfig.cjs.json" - }, - { - "path": "../tx/tsconfig.cjs.json" - }, - { - "path": "../util/tsconfig.cjs.json" - } - ] -} diff --git a/packages/contract/vite.cjs.config.ts b/packages/contract/vite.cjs.config.ts deleted file mode 100644 index e774046366..0000000000 --- a/packages/contract/vite.cjs.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import path from "node:path"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import { ViteCommonJSConfig } from "@prosopo/config"; - -export default function () { - return ViteCommonJSConfig("contract", path.resolve("./tsconfig.cjs.json")); -} diff --git a/packages/database/package.json b/packages/database/package.json index ea11034cc5..8fbb40f315 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/database", - "version": "2.2.3", + "version": "2.3.0", "description": "Prosopo database plugins for provider", "main": "dist/index.js", "type": "module", @@ -31,10 +31,10 @@ }, "homepage": "https://github.com/prosopo/captcha#readme", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", "express": "4.21.1", "mongodb": "6.9.0", "mongodb-memory-server": "10.0.0", diff --git a/packages/database/src/databases/provider.ts b/packages/database/src/databases/provider.ts index 2ddb8a6be8..b0e7039a8c 100644 --- a/packages/database/src/databases/provider.ts +++ b/packages/database/src/databases/provider.ts @@ -1455,7 +1455,7 @@ export class ProviderDatabase } /** - * @description Check if a request has a blocking rule associated with it + * @description Store IP blocking rule records */ async storeIPBlockRuleRecords(rules: IPBlockRuleRecord[]) { await this.tables?.ipblockrules.bulkWrite( @@ -1469,6 +1469,21 @@ export class ProviderDatabase ); } + /** + * @description Remove IP blocking rule records + */ + async removeIPBlockRuleRecords(ipAddresses: bigint[], dappAccount?: string) { + const filter: { + [key in keyof Pick]: { $in: number[] }; + } & { + [key in keyof Pick]?: string; // Optional `dappAccount` key + } = { ip: { $in: ipAddresses.map(Number) } }; + if (dappAccount) { + filter.dappAccount = dappAccount; + } + await this.tables?.ipblockrules.deleteMany(filter); + } + /** * @description Check if a request has a blocking rule associated with it */ @@ -1503,4 +1518,24 @@ export class ProviderDatabase })), ); } + + /** + * @description Remove user blocking rule records + */ + async removeUserBlockRuleRecords( + userAccounts: string[], + dappAccount?: string, + ) { + const filter: { + [key in keyof Pick]: { + $in: string[]; + }; + } & { + [key in keyof Pick]?: string; // Optional `dappAccount` key + } = { userAccount: { $in: userAccounts } }; + if (dappAccount) { + filter.dappAccount = dappAccount; + } + await this.tables?.userblockrules.deleteMany(filter); + } } diff --git a/packages/datasets-fs/package.json b/packages/datasets-fs/package.json index a8ccbff350..bba3f18983 100644 --- a/packages/datasets-fs/package.json +++ b/packages/datasets-fs/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/datasets-fs", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "private": false, @@ -28,9 +28,9 @@ "@noble/hashes": "1.5.0", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "bcrypt": "5.1.1", "cli-progress": "3.12.0", "express": "4.21.1", @@ -39,7 +39,7 @@ "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/bcrypt": "5.0.2", "@types/cli-progress": "3.11.6", "@vitest/coverage-v8": "2.1.1", diff --git a/packages/datasets-fs/src/commands/generateV1.ts b/packages/datasets-fs/src/commands/generateV1.ts index 322d2a83e2..af1fab7be9 100644 --- a/packages/datasets-fs/src/commands/generateV1.ts +++ b/packages/datasets-fs/src/commands/generateV1.ts @@ -1,3 +1,17 @@ +// Copyright 2021-2024 Prosopo (UK) Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import fs from "node:fs"; import { blake2AsHex } from "@polkadot/util-crypto/blake2"; import { ProsopoDatasetError, ProsopoEnvError } from "@prosopo/common"; @@ -13,19 +27,6 @@ import { at, get } from "@prosopo/util"; import { lodash } from "@prosopo/util/lodash"; import bcrypt from "bcrypt"; import cliProgress from "cli-progress"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. import * as z from "zod"; import { Generate, ArgsSchema as GenerateArgsSchema } from "./generate.js"; diff --git a/packages/datasets-fs/src/commands/generateV2.ts b/packages/datasets-fs/src/commands/generateV2.ts index 56946b15d5..d0a8faf5a1 100644 --- a/packages/datasets-fs/src/commands/generateV2.ts +++ b/packages/datasets-fs/src/commands/generateV2.ts @@ -1,3 +1,17 @@ +// Copyright 2021-2024 Prosopo (UK) Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import fs from "node:fs"; import { blake2AsHex } from "@polkadot/util-crypto/blake2"; import { ProsopoDatasetError } from "@prosopo/common"; @@ -13,19 +27,6 @@ import { at, get } from "@prosopo/util"; import { lodash } from "@prosopo/util/lodash"; import bcrypt from "bcrypt"; import cliProgress from "cli-progress"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. import * as z from "zod"; import { Generate, ArgsSchema as GenerateArgsSchema } from "./generate.js"; diff --git a/packages/datasets/package.json b/packages/datasets/package.json index 03788c7634..f664ee03d6 100644 --- a/packages/datasets/package.json +++ b/packages/datasets/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/datasets", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "private": false, @@ -38,13 +38,13 @@ }, "dependencies": { "@polkadot/util": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/datasets/src/captcha/captcha.ts b/packages/datasets/src/captcha/captcha.ts index 114a152b14..3d05ab1752 100644 --- a/packages/datasets/src/captcha/captcha.ts +++ b/packages/datasets/src/captcha/captcha.ts @@ -1,10 +1,3 @@ -import { isHex } from "@polkadot/util"; -import { - ProsopoDatasetError, - ProsopoEnvError, - hexHash, - hexHashArray, -} from "@prosopo/common"; // Copyright 2021-2024 Prosopo (UK) Ltd. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,6 +11,14 @@ import { // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + +import { isHex } from "@polkadot/util"; +import { + ProsopoDatasetError, + ProsopoEnvError, + hexHash, + hexHashArray, +} from "@prosopo/common"; import { type AssetsResolver, type Captcha, diff --git a/packages/detector/package.json b/packages/detector/package.json index 3d426d7b87..93bd160f20 100644 --- a/packages/detector/package.json +++ b/packages/detector/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/detector", - "version": "2.2.3", + "version": "2.3.0", "main": "src/index.js", "engines": { "node": "20", diff --git a/packages/dotenv/package.json b/packages/dotenv/package.json index 8211a6d4ec..5c19489276 100644 --- a/packages/dotenv/package.json +++ b/packages/dotenv/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/dotenv", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "private": false, @@ -25,8 +25,8 @@ }, "types": "./dist/index.d.ts", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1" }, diff --git a/packages/env/package.json b/packages/env/package.json index e522c01639..77bfc72827 100644 --- a/packages/env/package.json +++ b/packages/env/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/env", - "version": "2.2.3", + "version": "2.3.0", "description": "Path env prosopo environment", "main": "dist/index.js", "type": "module", @@ -24,19 +24,19 @@ "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/database": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", - "@prosopo/types-env": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/database": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", + "@prosopo/types-env": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1" }, "overrides": { "@polkadot/keyring": "12.6.2" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/file-server/package.json b/packages/file-server/package.json index cbca4548d7..0cdfbff42a 100644 --- a/packages/file-server/package.json +++ b/packages/file-server/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/file-server", - "version": "2.2.3", + "version": "2.3.0", "description": "Simple static file server", "main": "dist/index.js", "type": "module", @@ -22,14 +22,14 @@ "start": "node ./dist/index.js" }, "dependencies": { - "@prosopo/util": "2.2.3", + "@prosopo/util": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1", "node-fetch": "3.3.2", "sharp": "0.33.5" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/express": "4.17.21", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", diff --git a/packages/fingerprint/package.json b/packages/fingerprint/package.json index 8f1fc9f7dd..ed881806f9 100644 --- a/packages/fingerprint/package.json +++ b/packages/fingerprint/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/fingerprint", - "version": "2.2.3", + "version": "2.3.0", "description": "Provider fingerprint", "main": "dist/index.js", "type": "module", diff --git a/packages/fingerprint/src/index.ts b/packages/fingerprint/src/index.ts index ee308f66b4..7f412d8a14 100644 --- a/packages/fingerprint/src/index.ts +++ b/packages/fingerprint/src/index.ts @@ -12,9 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FingerprintJS from "@fingerprintjs/fingerprintjs"; +const FingerprintJSImport = async () => + (await import("@fingerprintjs/fingerprintjs")).default; export const getFingerprint = async () => { + const FingerprintJS = await FingerprintJSImport(); const fp = await FingerprintJS.load(); const result = await fp.get(); return result.visitorId; diff --git a/packages/tx/package.json b/packages/keyring/package.json similarity index 56% rename from packages/tx/package.json rename to packages/keyring/package.json index b48e9eb7cb..1c2e565c74 100644 --- a/packages/tx/package.json +++ b/packages/keyring/package.json @@ -1,48 +1,44 @@ { - "name": "@prosopo/tx", - "version": "2.2.3", - "author": "PROSOPO LIMITED ", - "license": "Apache-2.0", - "scripts": { - "test": "echo \"No test specified\"", - "clean": "tsc --build --clean", - "build": "tsc --build --verbose", - "build:cjs": "npx vite --config vite.cjs.config.ts build" - }, + "name": "@prosopo/keyring", + "version": "2.3.0", + "description": "Keypair generator for Prosopo", + "main": "dist/index.js", "type": "module", "engines": { "node": "20", "npm": ">=9" }, - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "files": ["dist"], "exports": { ".": { "import": "./dist/index.js", "require": "./dist/cjs/index.cjs" } }, - "typesVersions": { - "*": { - "types": ["dist/types"], - "captcha": ["dist/captcha"] - } + "scripts": { + "test": "echo \"No test specified\"", + "clean": "tsc --build --clean", + "build": "tsc --build --verbose", + "build:cjs": "npx vite --config vite.cjs.config.ts build" }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/prosopo/types.git" + }, + "author": "Prosopo Limited", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/prosopo/captcha/issues" + }, + "homepage": "https://github.com/prosopo/captcha#readme", "dependencies": { - "@polkadot/api": "10.13.1", - "@polkadot/api-augment": "10.13.1", - "@polkadot/api-contract": "10.13.1", "@polkadot/keyring": "12.6.2", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", "@polkadot/util": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "express": "4.21.1" + "@polkadot/util-crypto": "12.6.2", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", @@ -53,17 +49,5 @@ "vite": "5.4.6", "vitest": "2.1.1" }, - "repository": { - "type": "git", - "url": "git+https://github.com/prosopo/captcha.git" - }, - "bugs": { - "url": "https://github.com/prosopo/captcha/issues" - }, - "homepage": "https://github.com/prosopo/captcha#readme", - "publishConfig": { - "registry": "https://registry.npmjs.org" - }, - "description": "", "sideEffects": false } diff --git a/packages/contract/src/accounts/getPair.ts b/packages/keyring/src/accounts/getPair.ts similarity index 78% rename from packages/contract/src/accounts/getPair.ts rename to packages/keyring/src/accounts/getPair.ts index accd43ace6..8d59d5bbcd 100644 --- a/packages/contract/src/accounts/getPair.ts +++ b/packages/keyring/src/accounts/getPair.ts @@ -12,17 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -import type { ApiPromise } from "@polkadot/api/promise/Api"; import { Keyring } from "@polkadot/keyring"; import type { KeyringPair, KeyringPair$Json } from "@polkadot/keyring/types"; -import type { AccountId } from "@polkadot/types/interfaces"; import { cryptoWaitReady } from "@polkadot/util-crypto"; import { mnemonicValidate } from "@polkadot/util-crypto/mnemonic"; import type { KeypairType } from "@polkadot/util-crypto/types"; import { hexToU8a } from "@polkadot/util/hex"; import { isHex } from "@polkadot/util/is"; import { ProsopoEnvError } from "@prosopo/common"; -import { NetworkPairTypeSchema, type PolkadotSecretJSON } from "@prosopo/types"; +import type { PolkadotSecretJSON } from "@prosopo/types"; export async function getPairAsync( secret?: string | KeyringPair$Json | PolkadotSecretJSON, @@ -74,23 +72,3 @@ export function getPair( throw new ProsopoEnvError("GENERAL.NO_MNEMONIC_OR_SEED"); } } - -export function getReadOnlyPair( - api: ApiPromise, - userAccount?: string, -): KeyringPair { - // 5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM is the all zero address - return getPair( - undefined, - userAccount || getZeroAddress(api).toHex(), - NetworkPairTypeSchema.parse("sr25519"), - api.registry.chainSS58, - ); -} - -export function getZeroAddress(api: ApiPromise): AccountId { - return api.registry.createType( - "AccountId", - new Uint8Array(new Array(32).fill(0)), - ); -} diff --git a/packages/contract/src/accounts/index.ts b/packages/keyring/src/accounts/index.ts similarity index 100% rename from packages/contract/src/accounts/index.ts rename to packages/keyring/src/accounts/index.ts diff --git a/packages/contract/src/accounts/mnemonic.ts b/packages/keyring/src/accounts/mnemonic.ts similarity index 99% rename from packages/contract/src/accounts/mnemonic.ts rename to packages/keyring/src/accounts/mnemonic.ts index dc370f2fce..979079e541 100644 --- a/packages/contract/src/accounts/mnemonic.ts +++ b/packages/keyring/src/accounts/mnemonic.ts @@ -1,9 +1,3 @@ -import { Keyring } from "@polkadot/keyring"; -import { cryptoWaitReady } from "@polkadot/util-crypto"; -import { - mnemonicGenerate, - mnemonicToMiniSecret, -} from "@polkadot/util-crypto/mnemonic"; // Copyright 2021-2024 Prosopo (UK) Ltd. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +11,13 @@ import { // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + +import { Keyring } from "@polkadot/keyring"; +import { cryptoWaitReady } from "@polkadot/util-crypto"; +import { + mnemonicGenerate, + mnemonicToMiniSecret, +} from "@polkadot/util-crypto/mnemonic"; import type { KeypairType } from "@polkadot/util-crypto/types"; /** Generate a mnemonic, returning the mnemonic and associated address diff --git a/packages/tx/src/balances/index.ts b/packages/keyring/src/index.ts similarity index 94% rename from packages/tx/src/balances/index.ts rename to packages/keyring/src/index.ts index 27556b5668..b5570e8570 100644 --- a/packages/tx/src/balances/index.ts +++ b/packages/keyring/src/index.ts @@ -11,4 +11,4 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -export * from "./accounting.js"; +export * from "./accounts/index.js"; diff --git a/packages/tx/tsconfig.cjs.json b/packages/keyring/tsconfig.cjs.json similarity index 100% rename from packages/tx/tsconfig.cjs.json rename to packages/keyring/tsconfig.cjs.json diff --git a/packages/contract/tsconfig.json b/packages/keyring/tsconfig.json similarity index 66% rename from packages/contract/tsconfig.json rename to packages/keyring/tsconfig.json index b674e41d66..bbbebf9d4b 100644 --- a/packages/contract/tsconfig.json +++ b/packages/keyring/tsconfig.json @@ -2,21 +2,19 @@ "extends": "../../tsconfig.esm.json", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist", + "lib": ["es6", "dom"], + "allowJs": true, + "jsxImportSource": "@emotion/react" }, "include": ["src", "src/**/*.json"], + "references": [ { "path": "../common" }, { "path": "../types" - }, - { - "path": "../tx" - }, - { - "path": "../util" } ] } diff --git a/packages/tx/vite.cjs.config.ts b/packages/keyring/vite.cjs.config.ts similarity index 90% rename from packages/tx/vite.cjs.config.ts rename to packages/keyring/vite.cjs.config.ts index d6a560d503..b631fd793f 100644 --- a/packages/tx/vite.cjs.config.ts +++ b/packages/keyring/vite.cjs.config.ts @@ -15,5 +15,5 @@ import path from "node:path"; import { ViteCommonJSConfig } from "@prosopo/config"; export default function () { - return ViteCommonJSConfig("tx", path.resolve("./tsconfig.cjs.json")); + return ViteCommonJSConfig("util", path.resolve("./tsconfig.cjs.json")); } diff --git a/packages/load-balancer/package.json b/packages/load-balancer/package.json index eb08e252ec..faeec61cae 100644 --- a/packages/load-balancer/package.json +++ b/packages/load-balancer/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/load-balancer", - "version": "2.2.3", + "version": "2.3.0", "description": "Provider load balancer", "main": "dist/index.js", "type": "module", @@ -31,9 +31,9 @@ }, "homepage": "https://github.com/prosopo/captcha#readme", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/types": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/types": "2.3.0", "express": "4.21.1" }, "devDependencies": { diff --git a/packages/locale-browser/package.json b/packages/locale-browser/package.json index 908d064272..77733a64d1 100644 --- a/packages/locale-browser/package.json +++ b/packages/locale-browser/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/locale-browser", - "version": "2.2.3", + "version": "2.3.0", "description": "Prosopo browser locale", "main": "./dist/index.js", "type": "module", @@ -24,14 +24,14 @@ "author": "Prosopo Limited", "license": "Apache-2.0", "dependencies": { - "@prosopo/locale": "2.2.3", + "@prosopo/locale": "2.3.0", "express": "4.21.1", "i18next-browser-languagedetector": "7.2.1", "react-i18next": "11.18.6", "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "del-cli": "6.0.0", "dotenv": "16.4.5", diff --git a/packages/locale/package.json b/packages/locale/package.json index f76ccf2d95..1888e244ac 100644 --- a/packages/locale/package.json +++ b/packages/locale/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/locale", - "version": "2.2.3", + "version": "2.3.0", "description": "Prosopo locale library", "main": "./dist/index.js", "type": "module", @@ -31,7 +31,7 @@ "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "del-cli": "6.0.0", "dotenv": "16.4.5", diff --git a/packages/procaptcha-bundle/package.json b/packages/procaptcha-bundle/package.json index c96c0f9347..5c52ed18c2 100644 --- a/packages/procaptcha-bundle/package.json +++ b/packages/procaptcha-bundle/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/procaptcha-bundle", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "main": "./dist/index.js", @@ -29,13 +29,13 @@ }, "browserslist": ["> 0.5%, last 2 versions, not dead"], "dependencies": { - "@prosopo/dotenv": "2.2.3", - "@prosopo/locale": "2.2.3", - "@prosopo/procaptcha-frictionless": "2.2.3", - "@prosopo/procaptcha-pow": "2.2.3", - "@prosopo/procaptcha-react": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/dotenv": "2.3.0", + "@prosopo/locale": "2.3.0", + "@prosopo/procaptcha-frictionless": "2.3.0", + "@prosopo/procaptcha-pow": "2.3.0", + "@prosopo/procaptcha-react": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1", "react": "18.3.1", "react-dom": "18.3.1" @@ -53,7 +53,7 @@ "registry": "https://registry.npmjs.org" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/jsdom": "21.1.7", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", diff --git a/packages/procaptcha-common/package.json b/packages/procaptcha-common/package.json index 04688b331f..7bebc34949 100644 --- a/packages/procaptcha-common/package.json +++ b/packages/procaptcha-common/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/procaptcha-common", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "main": "./dist/index.js", @@ -26,14 +26,14 @@ }, "browserslist": ["> 0.5%, last 2 versions, not dead"], "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/load-balancer": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/load-balancer": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/procaptcha-frictionless/package.json b/packages/procaptcha-frictionless/package.json index 32ab87f567..e0314fbdc2 100644 --- a/packages/procaptcha-frictionless/package.json +++ b/packages/procaptcha-frictionless/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/procaptcha-frictionless", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "main": "./dist/index.js", @@ -26,17 +26,17 @@ }, "browserslist": ["> 0.5%, last 2 versions, not dead"], "dependencies": { - "@prosopo/detector": "2.2.3", - "@prosopo/locale-browser": "2.2.3", - "@prosopo/procaptcha-pow": "2.2.3", - "@prosopo/procaptcha-react": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/web-components": "2.2.3", + "@prosopo/detector": "2.3.0", + "@prosopo/locale-browser": "2.3.0", + "@prosopo/procaptcha-pow": "2.3.0", + "@prosopo/procaptcha-react": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/web-components": "2.3.0", "express": "4.21.1", "react": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/procaptcha-frictionless/src/ProcaptchaFrictionless.tsx b/packages/procaptcha-frictionless/src/ProcaptchaFrictionless.tsx index 2fd3e4fd35..9186ff8670 100644 --- a/packages/procaptcha-frictionless/src/ProcaptchaFrictionless.tsx +++ b/packages/procaptcha-frictionless/src/ProcaptchaFrictionless.tsx @@ -12,10 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { ExtensionWeb2 } from "@prosopo/account"; +import { ExtensionWeb2, ExtensionWeb3 } from "@prosopo/account"; import { ProviderApi } from "@prosopo/api"; import { ProsopoEnvError } from "@prosopo/common"; -import detect from "@prosopo/detector"; import { getRandomActiveProvider } from "@prosopo/procaptcha-common"; import { ProcaptchaPow } from "@prosopo/procaptcha-pow"; import { Procaptcha } from "@prosopo/procaptcha-react"; @@ -29,12 +28,19 @@ import { import { ProcaptchaPlaceholder } from "@prosopo/web-components"; import { useEffect, useState } from "react"; +const DetectorLoader = async () => (await import("@prosopo/detector")).default; +const ExtensionLoader = async (web2: boolean) => + web2 + ? (await import("@prosopo/account")).ExtensionWeb2 + : (await import("@prosopo/account")).ExtensionWeb3; + const customDetectBot: BotDetectionFunction = async ( config: ProcaptchaClientConfigOutput, ) => { + const detect = await DetectorLoader(); const botScore: { token: string } = await detect(); - - const userAccount = await new ExtensionWeb2().getAccount(config); + const ext = new (await ExtensionLoader(config.web2))(); + const userAccount = await ext.getAccount(config); if (!config.account.address) { throw new ProsopoEnvError("GENERAL.SITE_KEY_MISSING"); diff --git a/packages/procaptcha-pow/package.json b/packages/procaptcha-pow/package.json index 3dbef36be1..0b1585fa98 100644 --- a/packages/procaptcha-pow/package.json +++ b/packages/procaptcha-pow/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/procaptcha-pow", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "main": "./dist/index.js", @@ -27,15 +27,15 @@ "browserslist": ["> 0.5%, last 2 versions, not dead"], "dependencies": { "@polkadot/util": "12.6.2", - "@prosopo/account": "2.2.3", - "@prosopo/api": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/locale-browser": "2.2.3", - "@prosopo/procaptcha": "2.2.3", - "@prosopo/procaptcha-common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", - "@prosopo/web-components": "2.2.3", + "@prosopo/account": "2.3.0", + "@prosopo/api": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/locale-browser": "2.3.0", + "@prosopo/procaptcha": "2.3.0", + "@prosopo/procaptcha-common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", + "@prosopo/web-components": "2.3.0", "express": "4.21.1", "react": "18.3.1" }, @@ -47,7 +47,7 @@ } }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/procaptcha-pow/src/components/ProcaptchaWidget.tsx b/packages/procaptcha-pow/src/components/ProcaptchaWidget.tsx index 2ae78c3527..1b1441cad2 100644 --- a/packages/procaptcha-pow/src/components/ProcaptchaWidget.tsx +++ b/packages/procaptcha-pow/src/components/ProcaptchaWidget.tsx @@ -63,6 +63,7 @@ const Procaptcha = (props: ProcaptchaProps) => { maxWidth: WIDGET_MAX_WIDTH, maxHeight: "100%", overflowX: "auto", + ...theme.font, }} > diff --git a/packages/procaptcha-react/package.json b/packages/procaptcha-react/package.json index 6aa8ab5f7c..857966ea76 100644 --- a/packages/procaptcha-react/package.json +++ b/packages/procaptcha-react/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/procaptcha-react", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "main": "./dist/index.js", @@ -26,13 +26,13 @@ }, "browserslist": ["> 0.5%, last 2 versions, not dead"], "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/locale-browser": "2.2.3", - "@prosopo/procaptcha": "2.2.3", - "@prosopo/procaptcha-common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", - "@prosopo/web-components": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/locale-browser": "2.3.0", + "@prosopo/procaptcha": "2.3.0", + "@prosopo/procaptcha-common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", + "@prosopo/web-components": "2.3.0", "csstype": "3.1.3", "express": "4.21.1", "react": "18.3.1" @@ -50,7 +50,7 @@ } }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/procaptcha-react/src/components/ProcaptchaWidget.tsx b/packages/procaptcha-react/src/components/ProcaptchaWidget.tsx index 2b0f30970c..2b90d6c41f 100644 --- a/packages/procaptcha-react/src/components/ProcaptchaWidget.tsx +++ b/packages/procaptcha-react/src/components/ProcaptchaWidget.tsx @@ -61,6 +61,7 @@ const ProcaptchaWidget = (props: ProcaptchaProps) => { maxWidth: WIDGET_MAX_WIDTH, maxHeight: "100%", overflowX: "auto", + ...theme.font, }} > diff --git a/packages/procaptcha/package.json b/packages/procaptcha/package.json index 6647b3d7e1..e98390dc45 100644 --- a/packages/procaptcha/package.json +++ b/packages/procaptcha/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/procaptcha", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "main": "./dist/index.js", @@ -33,14 +33,14 @@ "@polkadot/api-contract": "10.13.1", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/account": "2.2.3", - "@prosopo/api": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/datasets": "2.2.3", - "@prosopo/load-balancer": "2.2.3", - "@prosopo/procaptcha-common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/account": "2.3.0", + "@prosopo/api": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/datasets": "2.3.0", + "@prosopo/load-balancer": "2.3.0", + "@prosopo/procaptcha-common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/util": "2.3.0", "express": "4.21.1", "jsdom": "25.0.0" }, @@ -57,7 +57,7 @@ } }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/procaptcha/src/modules/Manager.ts b/packages/procaptcha/src/modules/Manager.ts index 00af84b60d..aa3a0975b9 100644 --- a/packages/procaptcha/src/modules/Manager.ts +++ b/packages/procaptcha/src/modules/Manager.ts @@ -11,10 +11,9 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import { cryptoWaitReady } from "@polkadot/util-crypto"; import { randomAsHex } from "@polkadot/util-crypto/random"; import { stringToHex } from "@polkadot/util/string"; -import { ExtensionWeb2, ExtensionWeb3 } from "@prosopo/account"; +import type { ExtensionWeb2, ExtensionWeb3 } from "@prosopo/account"; import { ProviderApi } from "@prosopo/api"; import { ProsopoDatasetError, @@ -110,7 +109,6 @@ export function Manager( if (state.isHuman) { return; } - await cryptoWaitReady(); resetState(); // set the loading flag to true (allow UI to show some sort of loading / pending indicator while we get the captcha process going) @@ -425,15 +423,28 @@ export function Manager( } // check if account exists in extension - const selectAccount = async () => { + const selectAccount = async ( + extensionImport: () => Promise< + typeof ExtensionWeb2 | typeof ExtensionWeb3 + >, + ) => { if (frictionlessState) { return frictionlessState.userAccount; } - const ext = config.web2 ? new ExtensionWeb2() : new ExtensionWeb3(); + + const ext = new (await extensionImport())(); return await ext.getAccount(config); }; - const account = await selectAccount(); + const ExtensionWeb3Import = async () => + (await import("@prosopo/account")).ExtensionWeb3; + + const ExtensionWeb2Import = async () => + (await import("@prosopo/account")).ExtensionWeb2; + + const account = await selectAccount( + config.web2 ? ExtensionWeb2Import : ExtensionWeb3Import, + ); // Store the account in local storage storage.setAccount(account.account.address); diff --git a/packages/provider/package.json b/packages/provider/package.json index 64cfa51f18..5270813494 100644 --- a/packages/provider/package.json +++ b/packages/provider/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/provider", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "main": "./dist/index.js", @@ -27,16 +27,16 @@ "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", "@polkadot/util-crypto": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/config": "2.2.3", - "@prosopo/contract": "2.2.3", - "@prosopo/database": "2.2.3", - "@prosopo/datasets": "2.2.3", - "@prosopo/env": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", - "@prosopo/types-env": "2.2.3", - "@prosopo/util": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/config": "2.3.0", + "@prosopo/keyring": "2.3.0", + "@prosopo/database": "2.3.0", + "@prosopo/datasets": "2.3.0", + "@prosopo/env": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", + "@prosopo/types-env": "2.3.0", + "@prosopo/util": "2.3.0", "cron": "3.1.7", "express": "4.21.1", "ip-address": "10.0.1", diff --git a/packages/provider/src/api/admin.ts b/packages/provider/src/api/admin.ts index 74edb2891d..a02e8bdef9 100644 --- a/packages/provider/src/api/admin.ts +++ b/packages/provider/src/api/admin.ts @@ -13,9 +13,14 @@ import { Logger, logError } from "@prosopo/common"; // See the License for the specific language governing permissions and // limitations under the License. import { + AddBlockRulesIPSpec, + AddBlockRulesUserSpec, AdminApiPaths, type ApiResponse, + BlockRuleIPAddBody, RegisterSitekeyBody, + RemoveBlockRulesIPSpec, + RemoveBlockRulesUserSpec, } from "@prosopo/types"; import type { ProviderEnvironment } from "@prosopo/types-env"; import { Router } from "express"; @@ -42,5 +47,65 @@ export function prosopoAdminRouter(env: ProviderEnvironment): Router { } }); + router.post(AdminApiPaths.BlockRuleIPAdd, async (req, res, next) => { + try { + tasks.logger.info("Adding block rules"); + const parsed = AddBlockRulesIPSpec.parse(req.body); + await tasks.clientTaskManager.addIPBlockRules(parsed); + const response: ApiResponse = { + status: "success", + }; + res.json(response); + } catch (err) { + logError(err, tasks.logger); + res.status(400).send("An internal server error occurred."); + } + }); + + router.post(AdminApiPaths.BlockRuleIPRemove, async (req, res, next) => { + try { + tasks.logger.info("Removing block rules"); + const parsed = RemoveBlockRulesIPSpec.parse(req.body); + await tasks.clientTaskManager.removeIPBlockRules(parsed); + const response: ApiResponse = { + status: "success", + }; + res.json(response); + } catch (err) { + logError(err, tasks.logger); + res.status(400).send("An internal server error occurred."); + } + }); + + router.post(AdminApiPaths.BlocKRuleUserAdd, async (req, res, next) => { + try { + tasks.logger.info("Adding block rules"); + const parsed = AddBlockRulesUserSpec.parse(req.body); + await tasks.clientTaskManager.addUserBlockRules(parsed); + const response: ApiResponse = { + status: "success", + }; + res.json(response); + } catch (err) { + logError(err, tasks.logger); + res.status(400).send("An internal server error occurred."); + } + }); + + router.post(AdminApiPaths.BlockRuleUserRemove, async (req, res, next) => { + try { + tasks.logger.info("Removing block rules"); + const parsed = RemoveBlockRulesUserSpec.parse(req.body); + await tasks.clientTaskManager.removeUserBlockRules(parsed); + const response: ApiResponse = { + status: "success", + }; + res.json(response); + } catch (err) { + logError(err, tasks.logger); + res.status(400).send("An internal server error occurred."); + } + }); + return router; } diff --git a/packages/provider/src/api/domainMiddleware.ts b/packages/provider/src/api/domainMiddleware.ts index 19e7dca09d..55e6c376d9 100644 --- a/packages/provider/src/api/domainMiddleware.ts +++ b/packages/provider/src/api/domainMiddleware.ts @@ -11,10 +11,9 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + import { validateAddress } from "@polkadot/util-crypto"; -import { ProviderApi } from "@prosopo/api"; import { ProsopoApiError } from "@prosopo/common"; -import { ApiPrefix, DappDomainRequestBody } from "@prosopo/types"; import type { ProviderEnvironment } from "@prosopo/types-env"; import type { NextFunction, Request, Response } from "express"; import { ZodError } from "zod"; diff --git a/packages/provider/src/rules/ip.ts b/packages/provider/src/rules/ip.ts index 986a2d0b5a..23ddcdc09c 100644 --- a/packages/provider/src/rules/ip.ts +++ b/packages/provider/src/rules/ip.ts @@ -11,12 +11,13 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import type { BlockRule, IProviderDatabase } from "@prosopo/types-database"; -import type { Address4, Address6 } from "ip-address"; + +import type { BlockRule, IPAddress } from "@prosopo/types"; +import type { IProviderDatabase } from "@prosopo/types-database"; export const checkIpRules = async ( db: IProviderDatabase, - ipAddress: Address4 | Address6, + ipAddress: IPAddress, dapp: string, ): Promise => { const rule = await db.getIPBlockRuleRecord(ipAddress.bigInt()); diff --git a/packages/provider/src/rules/user.ts b/packages/provider/src/rules/user.ts index 790b5c3699..698009f910 100644 --- a/packages/provider/src/rules/user.ts +++ b/packages/provider/src/rules/user.ts @@ -11,7 +11,9 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import type { BlockRule, IProviderDatabase } from "@prosopo/types-database"; + +import type { BlockRule } from "@prosopo/types"; +import type { IProviderDatabase } from "@prosopo/types-database"; export const checkUserRules = async ( db: IProviderDatabase, diff --git a/packages/provider/src/tasks/client/clientTasks.ts b/packages/provider/src/tasks/client/clientTasks.ts index 63b9ac0af5..b770728d4d 100644 --- a/packages/provider/src/tasks/client/clientTasks.ts +++ b/packages/provider/src/tasks/client/clientTasks.ts @@ -16,20 +16,23 @@ import { validateAddress } from "@polkadot/util-crypto/address"; import { type Logger, ProsopoApiError } from "@prosopo/common"; import { CaptchaDatabase, ClientDatabase } from "@prosopo/database"; import { - type CaptchaConfig, + type AddBlockRulesIP, + type AddBlockRulesUser, + BlockRuleType, type IUserSettings, type ProsopoConfigOutput, + type RemoveBlockRulesIP, + type RemoveBlockRulesUser, ScheduledTaskNames, ScheduledTaskStatus, } from "@prosopo/types"; -import { - BlockRuleType, - type ClientRecord, - type IPAddressBlockRule, - type IProviderDatabase, - type PoWCaptchaStored, - type UserAccountBlockRule, - type UserCommitment, +import type { + ClientRecord, + IPAddressBlockRule, + IProviderDatabase, + PoWCaptchaStored, + UserAccountBlockRule, + UserCommitment, } from "@prosopo/types-database"; import { parseUrl } from "@prosopo/util"; import { getIPAddress } from "../../util.js"; @@ -174,7 +177,11 @@ export class ClientTaskManager { this.logger, ); - const updatedAtTimestamp = 0; + // Get updated client records within a ten minute window of the last completed task + const tenMinuteWindow = new Date().getTime() - 10 * 60 * 1000; + const updatedAtTimestamp = lastTask?.updated + ? lastTask.updated - tenMinuteWindow || 0 + : 0; const newClientRecords = await clientDB.getUpdatedClients(updatedAtTimestamp); @@ -188,7 +195,7 @@ export class ClientTaskManager { ScheduledTaskStatus.Completed, { data: { - clientRecords: newClientRecords.map((c: ClientRecord) => c.account), + clientRecords: newClientRecords.length, }, }, ); @@ -218,46 +225,77 @@ export class ClientTaskManager { ]); } - async addIPBlockRules( - ips: string[], - global: boolean, - hardBlock: boolean, - dappAccount?: string, - captchaConfig?: CaptchaConfig, - ): Promise { - const rules: IPAddressBlockRule[] = ips.map((ip) => { - return { - ip: Number(getIPAddress(ip).bigInt()), - global, - type: BlockRuleType.ipAddress, - dappAccount, - hardBlock, - ...(captchaConfig && { captchaConfig }), - }; - }); - await this.providerDB.storeIPBlockRuleRecords(rules); + /** + * @description Add IP block rules to the database. Allows specifying mutiple IPs for a single configuration + * @param {AddBlockRulesIP} rulesets + */ + async addIPBlockRules(rulesets: AddBlockRulesIP): Promise { + for (const ruleset of rulesets) { + const rules: IPAddressBlockRule[] = ruleset.ips.map((ip) => { + return { + ip: Number(getIPAddress(ip).bigInt()), + global: ruleset.global, + type: BlockRuleType.ipAddress, + dappAccount: ruleset.dappAccount, + hardBlock: ruleset.hardBlock, + ...(ruleset.captchaConfig && { + captchaConfig: ruleset.captchaConfig, + }), + }; + }); + await this.providerDB.storeIPBlockRuleRecords(rules); + } } - async addUserBlockRules( - userAccounts: string[], - hardBlock: boolean, - global: boolean, - dappAccount?: string, - captchaConfig?: CaptchaConfig, - ): Promise { - validateAddress(dappAccount, false, 42); - const rules: UserAccountBlockRule[] = userAccounts.map((userAccount) => { - validateAddress(userAccount, false, 42); - return { - dappAccount, - userAccount, - type: BlockRuleType.userAccount, - global, - hardBlock, - ...(captchaConfig && { captchaConfig }), - }; - }); - await this.providerDB.storeUserBlockRuleRecords(rules); + /** + * @description Remove IP block rules from the database by IP address and optionally dapp account + * @param {RemoveBlockRulesIP} opts + */ + async removeIPBlockRules(opts: RemoveBlockRulesIP): Promise { + await this.providerDB.removeIPBlockRuleRecords( + opts.ips.map((ip) => getIPAddress(ip).bigInt()), + opts.dappAccount, + ); + } + + /** + * @description Add user block rules to the database. Allows specifying multiple users for a single configuration + * @param {AddBlockRulesUser} rulesets + */ + async addUserBlockRules(rulesets: AddBlockRulesUser): Promise { + for (const ruleset of rulesets) { + validateAddress(ruleset.dappAccount, false, 42); + const rules: UserAccountBlockRule[] = ruleset.users.map((userAccount) => { + validateAddress(userAccount, false, 42); + return { + dappAccount: ruleset.dappAccount, + userAccount, + type: BlockRuleType.userAccount, + global: ruleset.global, + hardBlock: ruleset.hardBlock, + ...(ruleset.captchaConfig && { + captchaConfig: ruleset.captchaConfig, + }), + }; + }); + await this.providerDB.storeUserBlockRuleRecords(rules); + } + } + + /** + * @description Remove user block rules from the database by user account and optionally dapp account + * @param {RemoveBlockRulesUser} opts + */ + async removeUserBlockRules(opts: RemoveBlockRulesUser): Promise { + if (opts.dappAccount) { + validateAddress(opts.dappAccount, false, 42); + await this.providerDB.removeUserBlockRuleRecords( + opts.users, + opts.dappAccount, + ); + } else { + await this.providerDB.removeUserBlockRuleRecords(opts.users); + } } isSubdomainOrExactMatch(referrer: string, clientDomain: string): boolean { diff --git a/packages/provider/src/tasks/dataset/datasetTasks.ts b/packages/provider/src/tasks/dataset/datasetTasks.ts index b484c1c06c..d15403f12a 100644 --- a/packages/provider/src/tasks/dataset/datasetTasks.ts +++ b/packages/provider/src/tasks/dataset/datasetTasks.ts @@ -14,8 +14,8 @@ import type { Logger } from "@prosopo/common"; // limitations under the License. import { parseCaptchaDataset } from "@prosopo/datasets"; import type { - CaptchaConfig, DatasetRaw, + ProsopoCaptchaCountConfigSchemaOutput, ProsopoConfigOutput, } from "@prosopo/types"; import type { IProviderDatabase } from "@prosopo/types-database"; @@ -24,13 +24,13 @@ import { providerValidateDataset } from "./datasetTasksUtils.js"; export class DatasetManager { config: ProsopoConfigOutput; logger: Logger; - captchaConfig: CaptchaConfig; + captchaConfig: ProsopoCaptchaCountConfigSchemaOutput; db: IProviderDatabase; constructor( config: ProsopoConfigOutput, logger: Logger, - captchaConfig: CaptchaConfig, + captchaConfig: ProsopoCaptchaCountConfigSchemaOutput, db: IProviderDatabase, ) { this.config = config; diff --git a/packages/provider/src/tasks/frictionless/frictionlessTasks.ts b/packages/provider/src/tasks/frictionless/frictionlessTasks.ts index 47efdd78f5..c50157e4f9 100644 --- a/packages/provider/src/tasks/frictionless/frictionlessTasks.ts +++ b/packages/provider/src/tasks/frictionless/frictionlessTasks.ts @@ -19,6 +19,7 @@ import { type CaptchaResult, CaptchaStatus, type GetFrictionlessCaptchaResponse, + type IPAddress, POW_SEPARATOR, type PoWCaptcha, type PoWChallengeId, @@ -49,10 +50,7 @@ export class FrictionlessManager { this.db = db; } - async checkIpRules( - ipAddress: Address4 | Address6, - dapp: string, - ): Promise { + async checkIpRules(ipAddress: IPAddress, dapp: string): Promise { const rule = await checkIpRules(this.db, ipAddress, dapp); return !!rule; } diff --git a/packages/provider/src/tasks/imgCaptcha/imgCaptchaTasks.ts b/packages/provider/src/tasks/imgCaptcha/imgCaptchaTasks.ts index 0e055ca51c..88572f9ba6 100644 --- a/packages/provider/src/tasks/imgCaptcha/imgCaptchaTasks.ts +++ b/packages/provider/src/tasks/imgCaptcha/imgCaptchaTasks.ts @@ -23,12 +23,12 @@ import { } from "@prosopo/datasets"; import { type Captcha, - type CaptchaConfig, type CaptchaSolution, CaptchaStatus, DEFAULT_IMAGE_CAPTCHA_TIMEOUT, type DappUserSolutionResult, type Hash, + type IPAddress, type ImageVerificationResponse, type PendingCaptchaRequest, type ProsopoCaptchaCountConfigSchemaOutput, @@ -40,10 +40,7 @@ import type { UserCommitment, } from "@prosopo/types-database"; import { at } from "@prosopo/util"; -import type { Address4, Address6 } from "ip-address"; -import { checkIpRules } from "../../rules/ip.js"; import { checkLangRules } from "../../rules/lang.js"; -import { checkUserRules } from "../../rules/user.js"; import { shuffleArray } from "../../util.js"; import { buildTreeAndGetCommitmentId } from "./imgCaptchaTasksUtils.js"; @@ -88,9 +85,9 @@ export class ImgCaptchaManager { async getRandomCaptchasAndRequestHash( datasetId: Hash, userAccount: string, - ipAddress: Address4 | Address6, + ipAddress: IPAddress, headers: RequestHeaders, - captchaConfig: CaptchaConfig, + captchaConfig: ProsopoCaptchaCountConfigSchemaOutput, ): Promise<{ captchas: Captcha[]; requestHash: string; diff --git a/packages/provider/src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts b/packages/provider/src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts index 555a759b7a..7d2ee72436 100644 --- a/packages/provider/src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts +++ b/packages/provider/src/tasks/imgCaptcha/imgCaptchaTasksUtils.ts @@ -17,12 +17,12 @@ import { computeCaptchaSolutionHash, } from "@prosopo/datasets"; import type { - CaptchaConfig, CaptchaSolution, + IPAddress, + ProsopoCaptchaCountConfigSchemaOutput, ProsopoConfigOutput, } from "@prosopo/types"; import type { IProviderDatabase } from "@prosopo/types-database"; -import type { Address4, Address6 } from "ip-address"; import { checkIpRules } from "../../rules/ip.js"; import { checkUserRules } from "../../rules/user.js"; @@ -67,10 +67,10 @@ export const buildTreeAndGetCommitmentId = ( export const getCaptchaConfig = async ( db: IProviderDatabase, config: ProsopoConfigOutput, - ipAddress: Address4 | Address6, + ipAddress: IPAddress, user: string, dapp: string, -): Promise => { +): Promise => { const ipRule = await checkIpRules(db, ipAddress, dapp); if (ipRule) { return { diff --git a/packages/provider/src/tasks/powCaptcha/powTasks.ts b/packages/provider/src/tasks/powCaptcha/powTasks.ts index 0e1edb424c..c5a8bddea4 100644 --- a/packages/provider/src/tasks/powCaptcha/powTasks.ts +++ b/packages/provider/src/tasks/powCaptcha/powTasks.ts @@ -22,6 +22,7 @@ import { ApiParams, type CaptchaResult, CaptchaStatus, + type IPAddress, POW_SEPARATOR, type PoWCaptcha, type PoWChallengeId, @@ -29,7 +30,6 @@ import { } from "@prosopo/types"; import type { IProviderDatabase } from "@prosopo/types-database"; import { at, verifyRecency } from "@prosopo/util"; -import type { Address4, Address6 } from "ip-address"; import { checkPowSignature, validateSolution } from "./powTasksUtils.js"; const logger = getLoggerDefault(); @@ -95,7 +95,7 @@ export class PowCaptchaManager { nonce: number, timeout: number, userTimestampSignature: string, - ipAddress: Address4 | Address6, + ipAddress: IPAddress, headers: RequestHeaders, ): Promise { // Check signatures before doing DB reads to avoid unnecessary network connections diff --git a/packages/provider/src/tasks/powCaptcha/powTasksUtils.ts b/packages/provider/src/tasks/powCaptcha/powTasksUtils.ts index 93411814e4..431be85a3b 100644 --- a/packages/provider/src/tasks/powCaptcha/powTasksUtils.ts +++ b/packages/provider/src/tasks/powCaptcha/powTasksUtils.ts @@ -11,13 +11,12 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + import { sha256 } from "@noble/hashes/sha256"; import { stringToHex } from "@polkadot/util"; import { signatureVerify } from "@polkadot/util-crypto"; import { ProsopoContractError } from "@prosopo/common"; -import { verifyRecency } from "@prosopo/util"; - export const validateSolution = ( nonce: number, challenge: string, diff --git a/packages/provider/src/tasks/tasks.ts b/packages/provider/src/tasks/tasks.ts index 41c7b29603..124669a705 100644 --- a/packages/provider/src/tasks/tasks.ts +++ b/packages/provider/src/tasks/tasks.ts @@ -13,7 +13,10 @@ import { type Logger, ProsopoEnvError, getLogger } from "@prosopo/common"; // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import type { CaptchaConfig, ProsopoConfigOutput } from "@prosopo/types"; +import type { + ProsopoCaptchaCountConfigSchemaOutput, + ProsopoConfigOutput, +} from "@prosopo/types"; import type { IProviderDatabase } from "@prosopo/types-database"; import type { ProviderEnvironment } from "@prosopo/types-env"; import { ClientTaskManager } from "./client/clientTasks.js"; @@ -27,7 +30,7 @@ import { PowCaptchaManager } from "./powCaptcha/powTasks.js"; */ export class Tasks { db: IProviderDatabase; - captchaConfig: CaptchaConfig; + captchaConfig: ProsopoCaptchaCountConfigSchemaOutput; logger: Logger; config: ProsopoConfigOutput; pair: KeyringPair; diff --git a/packages/provider/src/tests/integration/imgCaptcha.integration.test.ts b/packages/provider/src/tests/integration/imgCaptcha.integration.test.ts index 53c9e0b5b9..4f247d6ce0 100644 --- a/packages/provider/src/tests/integration/imgCaptcha.integration.test.ts +++ b/packages/provider/src/tests/integration/imgCaptcha.integration.test.ts @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. import { stringToU8a, u8aToHex } from "@polkadot/util"; -import { generateMnemonic, getPairAsync } from "@prosopo/contract"; import { datasetWithSolutionHashes } from "@prosopo/datasets"; +import { generateMnemonic, getPairAsync } from "@prosopo/keyring"; import { ApiParams, ApiPaths, diff --git a/packages/provider/src/tests/integration/powCaptcha.integration.test.ts b/packages/provider/src/tests/integration/powCaptcha.integration.test.ts index dd061c47a0..802ceb6b40 100644 --- a/packages/provider/src/tests/integration/powCaptcha.integration.test.ts +++ b/packages/provider/src/tests/integration/powCaptcha.integration.test.ts @@ -14,7 +14,7 @@ import { sha256 } from "@noble/hashes/sha256"; import { u8aToHex } from "@polkadot/util/u8a"; -import { generateMnemonic, getPairAsync } from "@prosopo/contract"; +import { generateMnemonic, getPairAsync } from "@prosopo/keyring"; import { ApiParams, ApiPaths, diff --git a/packages/provider/src/tests/unit/tasks/dataset/datasetTasks.unit.test.ts b/packages/provider/src/tests/unit/tasks/dataset/datasetTasks.unit.test.ts index 7b4637c755..2d3a089b4a 100644 --- a/packages/provider/src/tests/unit/tasks/dataset/datasetTasks.unit.test.ts +++ b/packages/provider/src/tests/unit/tasks/dataset/datasetTasks.unit.test.ts @@ -15,8 +15,8 @@ import type { Logger } from "@prosopo/common"; import { parseCaptchaDataset } from "@prosopo/datasets"; import type { - CaptchaConfig, DatasetRaw, + ProsopoCaptchaCountConfigSchemaOutput, ProsopoConfigOutput, ScheduledTaskNames, ScheduledTaskResult, @@ -52,7 +52,7 @@ type TestScheduledTaskRecord = Pick< describe("DatasetManager", () => { let config: ProsopoConfigOutput; let logger: Logger; - let captchaConfig: CaptchaConfig; + let captchaConfig: ProsopoCaptchaCountConfigSchemaOutput; let providerDB: IProviderDatabase; let datasetManager: DatasetManager; // biome-ignore lint/suspicious/noExplicitAny: @@ -74,7 +74,7 @@ describe("DatasetManager", () => { captchaConfig = { solved: { count: 5 }, unsolved: { count: 5 }, - } as CaptchaConfig; + } as ProsopoCaptchaCountConfigSchemaOutput; collections.schedulers = {} as { records: Record; diff --git a/packages/provider/src/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.ts b/packages/provider/src/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.ts index f24598be3e..089aae1d4e 100644 --- a/packages/provider/src/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.ts +++ b/packages/provider/src/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.ts @@ -11,6 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + import type { KeyringPair } from "@polkadot/keyring/types"; import { u8aToHex } from "@polkadot/util"; import { randomAsHex } from "@polkadot/util-crypto"; diff --git a/packages/provider/src/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.ts b/packages/provider/src/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.ts index 6a0fb5eae3..68a2a7cc36 100644 --- a/packages/provider/src/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.ts +++ b/packages/provider/src/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.ts @@ -16,13 +16,11 @@ import { CaptchaMerkleTree, computeCaptchaSolutionHash, } from "@prosopo/datasets"; -import type { CaptchaSolution } from "@prosopo/types"; -import { - BlockRuleType, - type IPAddressBlockRule, - type IProviderDatabase, - type UserAccountBlockRule, - type UserAccountBlockRuleRecord, +import { BlockRuleType, type CaptchaSolution } from "@prosopo/types"; +import type { + IPAddressBlockRule, + IProviderDatabase, + UserAccountBlockRule, } from "@prosopo/types-database"; import { Address4 } from "ip-address"; import { beforeEach, describe, expect, it, vi } from "vitest"; diff --git a/packages/provider/src/tests/unit/util.unit.test.ts b/packages/provider/src/tests/unit/util.unit.test.ts index 3e8ab75843..0c4812d1bd 100644 --- a/packages/provider/src/tests/unit/util.unit.test.ts +++ b/packages/provider/src/tests/unit/util.unit.test.ts @@ -45,9 +45,10 @@ describe("checkIfTaskIsRunning", () => { it("should return true if the task is running and not completed", async () => { const taskName = ScheduledTaskNames.StoreCommitmentsExternal; const db = { - getLastScheduledTaskStatus: vi - .fn() - .mockResolvedValue({ _id: "123" } as Pick), + getLastScheduledTaskStatus: vi.fn().mockResolvedValue({ + _id: "123", + datetime: new Date().getTime(), + } as Pick), getScheduledTaskStatus: vi.fn().mockResolvedValue(null), } as unknown as IProviderDatabase; const result = await checkIfTaskIsRunning(taskName, db); diff --git a/packages/provider/src/util.ts b/packages/provider/src/util.ts index 462cc7d40d..01f681fb66 100644 --- a/packages/provider/src/util.ts +++ b/packages/provider/src/util.ts @@ -11,11 +11,16 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + import { decodeAddress, encodeAddress } from "@polkadot/util-crypto/address"; import { hexToU8a } from "@polkadot/util/hex"; import { isHex } from "@polkadot/util/is"; import { ProsopoContractError, ProsopoEnvError } from "@prosopo/common"; -import { type ScheduledTaskNames, ScheduledTaskStatus } from "@prosopo/types"; +import { + type IPAddress, + type ScheduledTaskNames, + ScheduledTaskStatus, +} from "@prosopo/types"; import type { IDatabase, IProviderDatabase } from "@prosopo/types-database"; import { at } from "@prosopo/util"; import { Address4, Address6 } from "ip-address"; @@ -57,7 +62,7 @@ export async function checkIfTaskIsRunning( taskName, ScheduledTaskStatus.Running, ); - const twoMinutesAgo = new Date().getTime() - 1000 * 60 * 2 + const twoMinutesAgo = new Date().getTime() - 1000 * 60 * 2; // If the task is running and the task was started within the last 2 minutes // TODO: This is a temporary fix to prevent failed tasks from blocking the next task if (runningTask && runningTask.datetime > twoMinutesAgo) { @@ -70,7 +75,7 @@ export async function checkIfTaskIsRunning( return false; } -export const getIPAddress = (ipAddressString: string): Address4 | Address6 => { +export const getIPAddress = (ipAddressString: string): IPAddress => { try { if (ipAddressString.match(/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/)) { return new Address4(ipAddressString); diff --git a/packages/provider/tsconfig.cjs.json b/packages/provider/tsconfig.cjs.json index 60fa332a52..fa99d6fd92 100644 --- a/packages/provider/tsconfig.cjs.json +++ b/packages/provider/tsconfig.cjs.json @@ -14,9 +14,7 @@ { "path": "../common/tsconfig.cjs.json" }, - { - "path": "../contract/tsconfig.cjs.json" - }, + { "path": "../../dev/config/tsconfig.cjs.json" }, @@ -29,6 +27,9 @@ { "path": "../env/tsconfig.cjs.json" }, + { + "path": "../keyring/tsconfig.cjs.json" + }, { "path": "../types/tsconfig.cjs.json" }, diff --git a/packages/provider/tsconfig.json b/packages/provider/tsconfig.json index 18277dc296..2f2b28c20e 100644 --- a/packages/provider/tsconfig.json +++ b/packages/provider/tsconfig.json @@ -10,9 +10,7 @@ { "path": "../common" }, - { - "path": "../contract" - }, + { "path": "../../dev/config" }, @@ -25,6 +23,9 @@ { "path": "../env" }, + { + "path": "../keyring" + }, { "path": "../types" }, diff --git a/packages/server/package.json b/packages/server/package.json index 3d4a42e4d8..f0f9115b10 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/server", - "version": "2.2.3", + "version": "2.3.0", "description": "NodeJS package for server side communication with the prosopo captcha client", "main": "./dist/index.js", "type": "module", @@ -34,14 +34,14 @@ "dependencies": { "@polkadot/keyring": "12.6.2", "@polkadot/util": "12.6.2", - "@prosopo/api": "2.2.3", - "@prosopo/common": "2.2.3", - "@prosopo/contract": "2.2.3", - "@prosopo/types": "2.2.3", + "@prosopo/api": "2.3.0", + "@prosopo/common": "2.3.0", + "@prosopo/keyring": "2.3.0", + "@prosopo/types": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index d6fff994af..3e13667436 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -14,7 +14,7 @@ import { ProsopoServer } from "./server.js"; export { ProsopoServer } from "./server.js"; export { getServerConfig, getServerUrl } from "./config.js"; -import { getPairAsync } from "@prosopo/contract"; +import { getPairAsync } from "@prosopo/keyring"; import type { ProsopoServerConfigOutput } from "@prosopo/types"; export const PublicProsopoServer = async ( config: ProsopoServerConfigOutput, diff --git a/packages/server/tsconfig.cjs.json b/packages/server/tsconfig.cjs.json index c28309860f..b8642f1cf8 100644 --- a/packages/server/tsconfig.cjs.json +++ b/packages/server/tsconfig.cjs.json @@ -19,7 +19,7 @@ "path": "../common/tsconfig.cjs.json" }, { - "path": "../contract/tsconfig.cjs.json" + "path": "../keyring/tsconfig.cjs.json" }, { "path": "../types/tsconfig.cjs.json" diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index c86af746da..3127618d11 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -14,7 +14,7 @@ "path": "../common" }, { - "path": "../contract" + "path": "../keyring" }, { "path": "../types" diff --git a/packages/tx/.npmignore b/packages/tx/.npmignore deleted file mode 100644 index 5248cae047..0000000000 --- a/packages/tx/.npmignore +++ /dev/null @@ -1,17 +0,0 @@ -/node_modules/ -/src/ -/tests/ -/artifacts/ -tsconfig.json -tsconfig.*.json -tsconfig.tsbuildinfo -env.production -env.development -env.test -.env.* -webpack.* -*.ipynb -captchas_*.json -data.json -stl10/*.json -stl10 diff --git a/packages/tx/README.md b/packages/tx/README.md deleted file mode 100644 index 1a49ec2fd5..0000000000 --- a/packages/tx/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# @prosopo/tx - -Helper functions for working with transactions in Polkadot. - -## Tx Queue - -The `TxQueue` class is a simple queue that can be used to manage transactions in a Polkadot network. It is designed to -be used with the `@polkadot/api` package. diff --git a/packages/tx/src/balances/accounting.ts b/packages/tx/src/balances/accounting.ts deleted file mode 100644 index c3aeb66149..0000000000 --- a/packages/tx/src/balances/accounting.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import { BN } from "@polkadot/util/bn"; -import { ProsopoApiError } from "@prosopo/common"; - -export const oneUnit = (api: ApiPromise): BN => { - if (api.registry.chainDecimals[0] === undefined) { - throw new ProsopoApiError("CONTRACT.CHAIN_DECIMALS_UNDEFINED"); - } - const chainDecimals = new BN(api.registry.chainDecimals[0]); - return new BN((10 ** chainDecimals.toNumber()).toString()); -}; - -export const getBalance = async ( - api: ApiPromise, - address: string, -): Promise => { - const { - data: { free: previousFree }, - } = await api.query.system.account(address); - return previousFree; -}; diff --git a/packages/tx/src/getDispatchError.ts b/packages/tx/src/getDispatchError.ts deleted file mode 100644 index 4f19c80509..0000000000 --- a/packages/tx/src/getDispatchError.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { DispatchError } from "@polkadot/types/interfaces"; - -/** Convert a dispatch error to a readable message - * @param dispatchError - */ -export function getDispatchError(dispatchError: DispatchError): string { - let message: string = dispatchError.type; - - if (dispatchError.isModule) { - try { - const mod = dispatchError.asModule; - const error = dispatchError.registry.findMetaError(mod); - - message = `${error.section}.${error.name}`; - } catch (error) { - console.log("ERROR GETTING ERROR!", error); - // swallow - } - } else if (dispatchError.isToken) { - message = `${dispatchError.type}.${dispatchError.asToken.type}`; - } - - return message; -} diff --git a/packages/tx/src/index.ts b/packages/tx/src/index.ts deleted file mode 100644 index e861100040..0000000000 --- a/packages/tx/src/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import "@polkadot/api-augment/substrate"; -export * from "./txQueue.js"; -export * from "./getDispatchError.js"; -export * from "./submitTx.js"; -export * from "./sendFunds.js"; -export * from "./balances/index.js"; diff --git a/packages/tx/src/sendFunds.ts b/packages/tx/src/sendFunds.ts deleted file mode 100644 index 9cc5b55cae..0000000000 --- a/packages/tx/src/sendFunds.ts +++ /dev/null @@ -1,83 +0,0 @@ -import type { ApiPromise } from "@polkadot/api"; -import type { KeyringPair } from "@polkadot/keyring/types"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { AnyNumber } from "@polkadot/types-codec/types"; -import type { Index } from "@polkadot/types/interfaces"; -import type { ISubmittableResult } from "@polkadot/types/types"; -import { BN } from "@polkadot/util"; -import { LogLevel, getLogger } from "@prosopo/common"; -import { getBalance, oneUnit } from "./balances/index.js"; -import { getDispatchError } from "./getDispatchError.js"; - -const log = getLogger(LogLevel.enum.info, "tx.sendFunds"); - -export const send = async ( - api: ApiPromise, - toAddress: string, - amount: AnyNumber, - fromPair: KeyringPair, - nonce?: Index, -) => { - if (!nonce) { - nonce = await api.rpc.system.accountNextIndex(fromPair.address); - } - await api.isReady; - const unit = oneUnit(api); - const unitAmount = new BN(amount.toString()).div(unit).toString(); - const balance = await getBalance(api, fromPair.address); - log.debug( - "Sending funds from", - fromPair.address, - "to", - toAddress, - "Amount:", - unitAmount, - "UNIT. Free balance:", - balance.div(unit).toString(), - "UNIT", - ); - // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO fix - return new Promise(async (resolve, reject) => { - const unsub = await api.tx.balances - .transferAllowDeath(toAddress, amount) - .signAndSend(fromPair, { nonce }, (result: ISubmittableResult) => { - if (result.status.isInBlock || result.status.isFinalized) { - // biome-ignore lint/complexity/noForEach: TODO fix - result.events - .filter( - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - ({ event: { section } }: any): boolean => section === "system", - ) - .forEach((event): void => { - const { - event: { method }, - } = event; - - if (method === "ExtrinsicFailed") { - unsub(); - reject(event); - } - }); - unsub(); - resolve(result); - } else if (result.isError) { - unsub(); - reject(result); - } else if (result.dispatchError) { - reject(getDispatchError(result.dispatchError)); - } - }); - }); -}; diff --git a/packages/tx/src/submitTx.ts b/packages/tx/src/submitTx.ts deleted file mode 100644 index 47b74da7c2..0000000000 --- a/packages/tx/src/submitTx.ts +++ /dev/null @@ -1,64 +0,0 @@ -import type { ContractSubmittableResult } from "@polkadot/api-contract/base/Contract"; -import type { KeyringPair } from "@polkadot/keyring/types"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { BN } from "@polkadot/util"; -import { LogLevel, ProsopoContractError, getLogger } from "@prosopo/common"; -import type { IProsopoCaptchaContract } from "@prosopo/types"; -import type { TransactionQueue } from "./txQueue.js"; - -const log = getLogger(LogLevel.enum.info, "submitTx"); - -export async function submitTx( - transactionQueue: TransactionQueue, - contract: IProsopoCaptchaContract, - method: string, - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - args: any[], - value: BN, - pair?: KeyringPair, -): Promise { - return new Promise((resolve, reject) => { - if ( - contract.nativeContract.tx && - method in contract.nativeContract.tx && - contract.nativeContract.tx[method] !== undefined - ) { - try { - contract.dryRunContractMethod(method, args, value).then((extrinsic) => { - transactionQueue - .add( - extrinsic, - (result: ContractSubmittableResult) => { - resolve(result); - }, - pair, - method, - ) - .then((result) => { - log.debug("Transaction added to queue", result); - }); - }); - } catch (err) { - reject(err); - } - } else { - reject( - new ProsopoContractError("CONTRACT.INVALID_METHOD", { - context: { failedFuncName: submitTx.name }, - }), - ); - } - }); -} diff --git a/packages/tx/src/txQueue.ts b/packages/tx/src/txQueue.ts deleted file mode 100644 index db865076a7..0000000000 --- a/packages/tx/src/txQueue.ts +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/* The following class takes extrinsics and submits them to the chain with a higher nonce than the previously submitted - * extrinsic. This is to avoid the situation where an extrinsic is submitted, but not yet completed, and then another - * extrinsic is submitted with the same nonce. This causes the second extrinsic to fail. Extrinsics are generated - * using code such as: - * ``` - * const extrinsic: SubmittableExtrinsic = await api.tx.balances.transfer(recipient, 123)` - * ``` - * A nonce is applied to the extrinsic when it is signed and sent: - * ``` - * const unsub = await extrinsic.signAndSend(pair, { nonce }, async (result: SubmittableResult) => { - * ``` - * The job of the queue is to keep track of the nonce and submit extrinsics with a higher nonce than the previously - * submitted extrinsic, even if the previously submitted extrinsics have not yet been processed. - * - * The queue is used in the following way: - * ``` - * const queue = new TransactionQueue() - * const extrinsic1 = await api.tx.balances.transfer(recipient, 123) - * const extrinsic2 = await api.tx.balances.transfer(recipient, 123) - * queue.add(extrinsic1, callback) - * queue.add(extrinsic2, callback) - * ``` - * When an extrinsic is finalised, the callback is called. The callback is passed the result of the extrinsic, which will - * be a ContractSubmittableResult. If the queue is currently submitting a transaction, the callback will not be called - * until the transaction has been submitted. The transaction will be submitted later by the queue. - */ -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import type { SubmittableResult } from "@polkadot/api/submittable"; -import type { SubmittableExtrinsic } from "@polkadot/api/types"; -import type { KeyringPair } from "@polkadot/keyring/types"; -import type { ISubmittableResult } from "@polkadot/types/types"; -import { - type LogLevel, - type Logger, - ProsopoContractError, - ProsopoTxQueueError, - getLogLevel, - getLogger, -} from "@prosopo/common"; -import { getDispatchError } from "./getDispatchError.js"; - -type TxCallbackFn = (result: ISubmittableResult) => void; - -type QueueItem = { - method: string; - extrinsic: SubmittableExtrinsic<"promise">; - callback: TxCallbackFn; - pair?: KeyringPair; -}; - -export class TransactionQueue { - private api: ApiPromise; - private queue: Array = []; - private nonce = 0; - private submitted = 0; - private busy = false; - private pair: KeyringPair; - private logger: Logger; - private running: boolean; - constructor(api: ApiPromise, pair: KeyringPair, logLevel?: LogLevel) { - this.api = api; - this.pair = pair; - this.queue = []; - this.nonce = 0; - this.busy = false; - this.submitted = 0; - this.logger = getLogger(getLogLevel(logLevel), "TransactionQueue"); - this.running = false; - } - - /** - * Adds an extrinsic to the queue. The extrinsic will be submitted to the chain with a nonce that is higher than the - * previously submitted extrinsic. - * @param extrinsic - * @param callback - * @param pair - * @param method - */ - public add( - extrinsic: SubmittableExtrinsic<"promise">, - callback: (result: SubmittableResult) => void, - pair?: KeyringPair, - method?: string, - ): Promise { - try { - this.queue.push({ - method: method || extrinsic.method.method.toString(), - extrinsic, - callback, - pair, - }); - this.running = true; - return this.submit(); - } catch (e) { - throw new ProsopoTxQueueError(new Error("CONTRACT.TX_QUEUE_ERROR"), { - context: { error: e, logLevel: this.logger.getLogLevel() }, - }); - } - } - - /** - * Runs the next extrinsic in the queue to the chain. - */ - private async submit() { - try { - this.logger.debug( - `TxQueue state: ${this.queue.length} items in the queue`, - ); - - if (this.queue.length === 0) { - this.logger.debug("TxQueue empty"); - this.running = false; - // if the queue is empty, do nothing - return undefined; - } - - if (this.busy) { - this.logger.debug("TxQueue busy"); - // if busy, wait for the next extrinsic to be added to the queue - return undefined; - } - - // Set the queue status to busy - this.busy = true; - - // Get the next item in the queue - const queueItem = this.queue.shift(); - - if (queueItem) { - this.logger.debug("Submitting item", queueItem.method); - const { method, extrinsic, callback, pair } = queueItem; - - // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO fix - return new Promise(async (resolve, reject) => { - // use either the optional pair supplied with the queue item or the default pair - const submittingPair = pair || this.pair; - - // take the nonce from the chain for the submitting pair - this.nonce = -1; - - this.logger.debug("Nonce:", this.nonce); - const unsub = await extrinsic.signAndSend( - submittingPair, - { nonce: -1 }, - async (result: SubmittableResult) => { - // TODO handle contract reverted by creating a new ContractSubmittableResult from the result - if (result.status.isInBlock || result.status.isFinalized) { - // run the callback for this extrinsic - this.logger.debug("Running user callback"); - resolve(callback(result)); - - // unsubscribe from this extrinsic - unsub(); - - // run the next extrinsic in the queue - this.logger.debug("Running next extrinsic in queue"); - this.busy = false; - this.submitted++; - await this.submit(); - } else if (result.status.isUsurped) { - // This shouldn't happen as it means we've submitted a nonce with too low a value - this.logger.debug("Transaction was usurped."); - reject( - new ProsopoTxQueueError( - new Error("CONTRACT.TX_QUEUE_ERROR"), - { - logLevel: this.logger.getLogLevel(), - context: { method, result: JSON.stringify(result) }, - }, - ), - ); - } else if (result.status.isInvalid) { - await this.add(extrinsic, callback, pair, method); - this.logger.debug("Resubmitted invalid transaction"); - this.busy = false; - this.logger.debug("Running next extrinsic in queue"); - // unsubscribe from this extrinsic - unsub(); - await this.submit(); - } else if (result.status.isFuture) { - // This shouldn't happen as it means we've submitted a nonce with too high a value - this.logger.debug( - "Transaction is scheduled for a future block.", - ); - reject( - new ProsopoTxQueueError( - new Error("CONTRACT.TX_QUEUE_ERROR"), - { - logLevel: this.logger.getLogLevel(), - context: { method, result }, - }, - ), - ); - } else if (result.dispatchError) { - const error = getDispatchError(result.dispatchError); - this.logger.error( - "Transaction failed with dispatch error:", - error, - ); - reject( - new ProsopoContractError("CONTRACT.DISPATCH_ERROR", { - context: { - method, - error, - extrinsic: extrinsic, - }, - logLevel: this.logger.getLogLevel(), - }), - ); - unsub(); - } - }, - ); - }); - } - this.logger.debug("TxQueue empty"); - this.running = false; - this.busy = false; - return undefined; - } catch (error) { - throw new ProsopoTxQueueError(new Error("CONTRACT.TX_QUEUE_ERROR"), { - context: { error }, - logLevel: this.logger.getLogLevel(), - }); - } - } -} diff --git a/packages/tx/tsconfig.json b/packages/tx/tsconfig.json deleted file mode 100644 index 850633434a..0000000000 --- a/packages/tx/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../tsconfig.esm.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist" - }, - "include": ["src", "src/**/*.json"], - "references": [ - { - "path": "../common" - }, - { - "path": "../types" - } - ] -} diff --git a/packages/types-database/package.json b/packages/types-database/package.json index 4024401119..97dc283ba3 100644 --- a/packages/types-database/package.json +++ b/packages/types-database/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/types-database", - "version": "2.2.3", + "version": "2.3.0", "description": "Types for prosopo database", "main": "dist/index.js", "type": "module", @@ -31,15 +31,15 @@ }, "homepage": "https://github.com/prosopo/captcha#readme", "dependencies": { - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", "express": "4.21.1", "mongodb": "6.9.0", "mongoose": "8.6.2", "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/types-database/src/types/provider.ts b/packages/types-database/src/types/provider.ts index 0a9337aaa0..4b506c346b 100644 --- a/packages/types-database/src/types/provider.ts +++ b/packages/types-database/src/types/provider.ts @@ -14,8 +14,9 @@ import { type TranslationKey, TranslationKeysSchema } from "@prosopo/locale"; import { + type BlockRule, + BlockRuleType, type Captcha, - type CaptchaConfig, type CaptchaResult, type CaptchaSolution, CaptchaSolutionSchema, @@ -32,6 +33,7 @@ import { type PoWCaptchaUser, type PoWChallengeComponents, type PoWChallengeId, + ProsopoCaptchaCountConfigSchema, type RequestHeaders, ScheduledTaskNames, type ScheduledTaskResult, @@ -39,7 +41,6 @@ import { type Timestamp, TimestampSchema, } from "@prosopo/types"; -import type { DeleteResult } from "mongodb"; import mongoose from "mongoose"; import { type Document, type Model, type ObjectId, Schema } from "mongoose"; import { @@ -384,18 +385,6 @@ export const SessionRecordSchema = new Schema({ SessionRecordSchema.index({ sessionId: 1 }, { unique: true }); -export type BlockRule = { - global: boolean; - type: BlockRuleType; - hardBlock: boolean; - captchaConfig?: CaptchaConfig; -}; - -export enum BlockRuleType { - ipAddress = "ipAddress", - userAccount = "userAccount", -} - export interface IPAddressBlockRule extends BlockRule { ip: number; dappAccount?: string; @@ -622,10 +611,17 @@ export interface IProviderDatabase extends IDatabase { storeIPBlockRuleRecords(rules: IPAddressBlockRule[]): Promise; + removeIPBlockRuleRecords(ips: bigint[], dappAccount?: string): Promise; + getUserBlockRuleRecord( userAccount: string, dappAccount: string, ): Promise; storeUserBlockRuleRecords(rules: UserAccountBlockRule[]): Promise; + + removeUserBlockRuleRecords( + users: string[], + dappAccount?: string, + ): Promise; } diff --git a/packages/types-env/package.json b/packages/types-env/package.json index ad1afd08aa..1533355012 100644 --- a/packages/types-env/package.json +++ b/packages/types-env/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/types-env", - "version": "2.2.3", + "version": "2.3.0", "description": "Types for prosopo environment", "main": "dist/index.js", "type": "module", @@ -32,13 +32,13 @@ "homepage": "https://github.com/prosopo/captcha#readme", "dependencies": { "@polkadot/keyring": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/types": "2.2.3", - "@prosopo/types-database": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/types": "2.3.0", + "@prosopo/types-database": "2.3.0", "express": "4.21.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/types/package.json b/packages/types/package.json index e9cfbc948f..99092dd09b 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/types", - "version": "2.2.3", + "version": "2.3.0", "description": "Types for prosopo TypeScript packages", "main": "dist/index.js", "type": "module", @@ -31,22 +31,16 @@ }, "homepage": "https://github.com/prosopo/captcha#readme", "dependencies": { - "@polkadot/api": "10.13.1", - "@polkadot/api-contract": "10.13.1", "@polkadot/extension-inject": "0.46.9", - "@polkadot/keyring": "12.6.2", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "12.6.2", - "@prosopo/common": "2.2.3", - "@prosopo/locale": "2.2.3", + "@prosopo/common": "2.3.0", + "@prosopo/locale": "2.3.0", "express": "4.21.1", "ip-address": "10.0.1", "scale-ts": "1.6.0", "zod": "3.23.8" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@types/node": "22.5.5", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", diff --git a/packages/types/src/config/config.ts b/packages/types/src/config/config.ts index fdba1bae5f..a0b22a090e 100644 --- a/packages/types/src/config/config.ts +++ b/packages/types/src/config/config.ts @@ -24,6 +24,7 @@ import type { infer as zInfer } from "zod"; import z, { boolean } from "zod"; import { ApiPathRateLimits, + ProsopoCaptchaCountConfigSchema, ProviderDefaultRateLimits, } from "../provider/index.js"; import { @@ -115,27 +116,6 @@ export const ProsopoBasicConfigSchema = ProsopoBaseConfigSchema.merge( export type ProsopoBasicConfigInput = input; export type ProsopoBasicConfigOutput = output; -export const ProsopoCaptchaCountConfigSchema = object({ - solved: object({ - count: number().positive(), - }) - .optional() - .default({ count: 1 }), - unsolved: object({ - count: number().nonnegative(), - }) - .optional() - .default({ count: 1 }), -}); - -export type ProsopoCaptchaCountConfigSchemaInput = input< - typeof ProsopoCaptchaCountConfigSchema ->; - -export type ProsopoCaptchaCountConfigSchemaOutput = output< - typeof ProsopoCaptchaCountConfigSchema ->; - export const ProsopoImageServerConfigSchema = object({ baseURL: string().url(), port: number().optional().default(9229), diff --git a/packages/types/src/contract/artifacts.ts b/packages/types/src/contract/artifacts.ts deleted file mode 100644 index c705520ffe..0000000000 --- a/packages/types/src/contract/artifacts.ts +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { Abi } from "@polkadot/api-contract/Abi"; -import { Text } from "@polkadot/types-codec/native"; -import z from "zod"; - -// { -// "id": 0, -// "type": { -// "def": { -// "composite": { -// "fields": [ -// { -// "name": "offset_key", -// "type": 10, -// "typeName": "Key" -// } -// ] -// } -// }, -// "params": [ -// { -// "name": "K", -// "type": 1 -// }, -// { -// "name": "V", -// "type": 4 -// } -// ], -// "path": [ -// "ink_storage", -// "lazy", -// "mapping", -// "Mapping" -// ] -// } -// }, -// { -// "id": 1, -// "type": { -// "def": { -// "composite": { -// "fields": [ -// { -// "type": 2, -// "typeName": "[u8; 32]" -// } -// ] -// } -// }, -// "path": [ -// "ink_env", -// "types", -// "AccountId" -// ] -// } -// }, -export const AbiParamSpec = z.object({ - name: z.string(), - type: z.union([z.number(), z.string()]), -}); - -export const AbiFieldSpec = z.object({ - name: z.string().optional(), - type: z.number(), - typeName: z.string().optional(), -}); - -export const AbiVariantSpec = z.object({ - index: z.number(), - name: z.string(), -}); - -//An enum in the storage section of the abi -// { -// "0": { -// "fields": [], -// "name": "Pending" -// }, -// "1": { -// "fields": [], -// "name": "Approved" -// }, -// "2": { -// "fields": [], -// "name": "Disapproved" -// } - -const AbiStorageEnumFieldSpec = z.object({ - name: z.string(), - fields: z.array(z.any()), -}); - -export const AbiStorageEnumSpec = z.record( - z.number().min(0), - AbiStorageEnumFieldSpec, -); - -export const AbiTypeSpec = z.object({ - id: z.number(), - type: z.object({ - def: z.object({ - composite: z - .object({ - fields: z.array(AbiFieldSpec).optional(), // some composite objects have no fields - }) - .optional(), - variant: z - .object({ - variants: z.union([ - z.array(AbiVariantSpec).optional(), - AbiStorageEnumSpec, - ]), - }) - .optional(), - sequence: z - .object({ - type: z.number(), - }) - .optional(), - array: z - .object({ - len: z.number(), - type: z.number(), - }) - .optional(), - primitive: z.string().optional(), - tuple: z.any().optional(), - }), - params: z.array(AbiParamSpec).optional(), - path: z.array(z.string()).optional(), - }), -}); - -export const AbiEnumSpec = z.object({ - dispatchKey: z.string(), - variants: z.any(), -}); - -export const AbiText = z.union([z.instanceof(Text), z.string()]); - -export const AbiCellSpec = z.object({ - key: AbiText, - ty: z.union([z.number(), z.string()]), -}); -export const AbiTypesSpec = z.array(AbiTypeSpec); - -// biome-ignore lint/suspicious/noExplicitAny: TODO fix -export const AbiStorageFieldSpec: any = z.lazy(() => - z.object({ - name: AbiText.optional(), - layout: z.object({ - leaf: AbiCellSpec.optional(), - enum: AbiEnumSpec.optional(), - root: AbiStorageFieldSpec.optional(), - struct: AbiStorageStructSpec.optional(), - }), - root_key: AbiText.optional(), - }), -); - -export const AbiStorageStructSpec = z.object({ - fields: z.array(AbiStorageFieldSpec), - name: z.string(), -}); - -export const AbiStorageSpec = z.object({ - root: z.object({ - layout: z.object({ - struct: AbiStorageStructSpec.optional(), - }), - }), -}); - -export type AbiStorage = z.infer; -export type AbiStorageField = z.infer; - -export const AbiSpecDef = z.object({ - constructors: z.array(z.any()), - docs: z.array(z.any()), - events: z.array(z.any()), - messages: z.array( - z.object({ - label: z.string(), - selector: z.string(), - }), - ), -}); - -enum metadataVersion { - V1 = "V1", - V2 = "V2", - V3 = "V3", -} - -export const AbiDetailsSpec = z.object({ - spec: AbiSpecDef, - types: AbiTypesSpec, - storage: AbiStorageSpec, -}); - -export const AbiMetaDataSpec = z.object({ - metadataVersion: z.string().optional(), - source: z.object({ - hash: z.string(), - language: z.string(), - compiler: z.string(), - wasm: z.string().optional(), - }), - contract: z.object({ - name: z.string(), - version: z.string(), - authors: z.array(z.string()), - }), - [metadataVersion.V1]: AbiDetailsSpec.optional(), - [metadataVersion.V2]: AbiDetailsSpec.optional(), - [metadataVersion.V3]: AbiDetailsSpec.optional(), - spec: AbiSpecDef, - types: AbiTypesSpec, - storage: AbiStorageSpec, -}); - -export type AbiMetadata = z.infer; - -export type ContractAbi = Record | Abi; - -export type AbiType = z.infer; - -export type TypegenDefinitions = { types: Record }; diff --git a/packages/types/src/contract/batch.ts b/packages/types/src/contract/batch.ts deleted file mode 100644 index 9980cd5a35..0000000000 --- a/packages/types/src/contract/batch.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { SubmittableExtrinsic } from "@polkadot/api/types"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { BN } from "@polkadot/util/bn"; -import type { Hash } from "@prosopo/types"; - -export interface ExtrinsicBatch { - extrinsics: SubmittableExtrinsic<"promise">[]; - ids: Hash[]; - totalFee: BN; - totalRefTime: BN; - totalProofSize: BN; -} diff --git a/packages/types/src/contract/contract.ts b/packages/types/src/contract/contract.ts deleted file mode 100644 index acad0a46a8..0000000000 --- a/packages/types/src/contract/contract.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import type { DecodedEvent } from "@polkadot/api-contract/types"; -import type { SubmittableResult } from "@polkadot/api/submittable"; - -export interface TransactionResponse { - from: string; - txHash?: string; - blockHash?: string; - error?: { - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - message?: any; - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - data?: any; - }; - result: SubmittableResult; - events?: DecodedEvent[]; -} diff --git a/packages/types/src/contract/index.ts b/packages/types/src/contract/index.ts deleted file mode 100644 index b8070293e2..0000000000 --- a/packages/types/src/contract/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -export * from "./artifacts.js"; -export * from "./contract.js"; -export * from "./interface.js"; -export * from "./useWeight.js"; -export * from "./batch.js"; diff --git a/packages/types/src/contract/interface.ts b/packages/types/src/contract/interface.ts deleted file mode 100644 index 7e75f2069d..0000000000 --- a/packages/types/src/contract/interface.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { ContractPromise } from "@polkadot/api-contract"; -import type { ContractOptions } from "@polkadot/api-contract/types"; -import type { ApiPromise } from "@polkadot/api/promise/Api"; -import type { SubmittableExtrinsic } from "@polkadot/api/promise/types"; -import type { KeyringPair } from "@polkadot/keyring/types"; -import type { BlockHash, StorageDeposit } from "@polkadot/types/interfaces"; -import type { BN } from "@polkadot/util/bn"; -import type { Logger } from "@prosopo/common"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { AbiMetadata } from "./artifacts.js"; - -export interface IProsopoCaptchaContract { - api: ApiPromise; - contractName: string; - contract: ContractPromise; - nativeContract: ContractPromise; - pair: KeyringPair; - options: ContractOptions | undefined; - nonce: number; - logger: Logger; - json: AbiMetadata; - dryRunContractMethod( - contractMethodName: string, - args: T[], - value?: BN | undefined, - ): Promise; - queryAtBlock( - blockHash: BlockHash, - methodName: string, - // biome-ignore lint/suspicious/noExplicitAny: TODO fix - args?: any[], - ): Promise; - getExtrinsicAndGasEstimates( - contractMethodName: string, - args: T[], - value?: number | BN | undefined, - ): Promise<{ - extrinsic: SubmittableExtrinsic; - options: ContractOptions; - storageDeposit: StorageDeposit; - }>; - getStorage(name: string): Promise; -} diff --git a/packages/types/src/contract/useWeight.ts b/packages/types/src/contract/useWeight.ts deleted file mode 100644 index 47640f9dae..0000000000 --- a/packages/types/src/contract/useWeight.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { WeightV2 } from "@polkadot/types/interfaces"; -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import type { BN } from "@polkadot/util/bn"; - -export interface UseWeight { - executionTime: number; - isEmpty: boolean; - isValid: boolean; - isWeightV2: boolean; - megaGas: BN; - megaRefTime: BN; - proofSize: BN; - percentage: number; - weight: BN; - weightV2: WeightV2; -} diff --git a/packages/types/src/datasets/captcha.ts b/packages/types/src/datasets/captcha.ts index deec4a478a..425f18a67e 100644 --- a/packages/types/src/datasets/captcha.ts +++ b/packages/types/src/datasets/captcha.ts @@ -160,21 +160,6 @@ export interface PoWCaptchaUser extends PoWCaptcha { dappAccount: DappAccount; } -export type CaptchaConfig = { - solved: { - count: number; - }; - unsolved: { - count: number; - }; -}; - -export type CaptchaSolutionConfig = { - requiredNumberOfSolutions: number; - solutionWinningPercentage: number; - captchaBlockRecency: number; -}; - export const CaptchaSchema = object({ captchaId: union([string(), zUndefined()]), captchaContentId: union([string(), zUndefined()]), diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 3a5ea4bd06..b79ea9fc00 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -14,7 +14,6 @@ export * from "./api/index.js"; export * from "./client/index.js"; export * from "./config/index.js"; -export * from "./contract/index.js"; export * from "./datasets/index.js"; export * from "./provider/index.js"; export * from "./procaptcha/index.js"; diff --git a/packages/types/src/provider/api.ts b/packages/types/src/provider/api.ts index d72330facb..344e71a373 100644 --- a/packages/types/src/provider/api.ts +++ b/packages/types/src/provider/api.ts @@ -20,8 +20,10 @@ import { type ZodObject, type ZodOptional, array, + boolean, coerce, type input, + nativeEnum, number, object, type output, @@ -82,6 +84,10 @@ export type TSubmitPowCaptchaSolutionURL = export enum AdminApiPaths { SiteKeyRegister = "/v1/prosopo/provider/admin/sitekey/register", + BlockRuleIPAdd = "/v1/prosopo/provider/admin/blockrule/ip/add", + BlockRuleIPRemove = "/v1/prosopo/provider/admin/blockrule/ip/remove", + BlocKRuleUserAdd = "/v1/prosopo/provider/admin/blockrule/user/add", + BlockRuleUserRemove = "/v1/prosopo/provider/admin/blockrule/user/remove", } export type CombinedApiPaths = ApiPaths | AdminApiPaths; @@ -98,6 +104,10 @@ export const ProviderDefaultRateLimits = { [ApiPaths.GetProviderDetails]: { windowMs: 60000, limit: 60 }, [ApiPaths.SubmitUserEvents]: { windowMs: 60000, limit: 60 }, [AdminApiPaths.SiteKeyRegister]: { windowMs: 60000, limit: 5 }, + [AdminApiPaths.BlockRuleIPAdd]: { windowMs: 60000, limit: 5 }, + [AdminApiPaths.BlockRuleIPRemove]: { windowMs: 60000, limit: 5 }, + [AdminApiPaths.BlocKRuleUserAdd]: { windowMs: 60000, limit: 5 }, + [AdminApiPaths.BlockRuleUserRemove]: { windowMs: 60000, limit: 5 }, }; type RateLimit = { @@ -345,6 +355,80 @@ export const RegisterSitekeyBody = object({ }).optional(), }); +export const ProsopoCaptchaCountConfigSchema = object({ + solved: object({ + count: number().positive(), + }) + .optional() + .default({ count: 1 }), + unsolved: object({ + count: number().nonnegative(), + }) + .optional() + .default({ count: 0 }), +}); + +export type ProsopoCaptchaCountConfigSchemaInput = input< + typeof ProsopoCaptchaCountConfigSchema +>; + +export type ProsopoCaptchaCountConfigSchemaOutput = output< + typeof ProsopoCaptchaCountConfigSchema +>; + +export enum BlockRuleType { + ipAddress = "ipAddress", + userAccount = "userAccount", +} + +const BlockRuleTypeSpec = nativeEnum(BlockRuleType); + +export const BlockRuleSpec = object({ + global: boolean(), + hardBlock: boolean(), + type: BlockRuleTypeSpec, + dappAccount: string().optional(), + captchaConfig: ProsopoCaptchaCountConfigSchema.optional(), +}); + +export type BlockRule = zInfer; + +export const AddBlockRulesIPSpec = array( + BlockRuleSpec.merge( + object({ + ips: array(string()), + }), + ), +); + +export type AddBlockRulesIP = zInfer; + +export const RemoveBlockRulesIPSpec = object({ + ips: array(string()), + dappAccount: string().optional(), +}); + +export type RemoveBlockRulesIP = zInfer; + +export const BlockRuleIPAddBody = array(AddBlockRulesIPSpec); + +export const AddBlockRulesUserSpec = array( + BlockRuleSpec.merge( + object({ + users: array(string()), + }), + ), +); + +export type AddBlockRulesUser = zInfer; + +export const RemoveBlockRulesUserSpec = object({ + users: array(string()), + dappAccount: string().optional(), +}); + +export type RemoveBlockRulesUser = zInfer; + export const DappDomainRequestBody = object({ [ApiParams.dapp]: string(), }); diff --git a/packages/util/package.json b/packages/util/package.json index 6b0aa0f4db..2da7dc669f 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/util", - "version": "2.2.3", + "version": "2.3.0", "author": "PROSOPO LIMITED ", "license": "Apache-2.0", "private": false, @@ -32,7 +32,7 @@ "types": "./dist/index.d.ts", "dependencies": { "@noble/hashes": "1.5.0", - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "dotenv": "16.4.5", "express": "4.21.1", "lodash": "4.17.21", diff --git a/packages/util/src/canvas.ts b/packages/util/src/canvas.ts deleted file mode 100644 index 0326998e25..0000000000 --- a/packages/util/src/canvas.ts +++ /dev/null @@ -1,505 +0,0 @@ -// Copyright 2021-2024 Prosopo (UK) Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import { at } from "./at.js"; - -function x64Add(m: number[], n: number[]) { - m = [at(m, 0) >>> 16, at(m, 0) & 0xffff, at(m, 1) >>> 16, at(m, 1) & 0xffff]; - n = [at(n, 0) >>> 16, at(n, 0) & 0xffff, at(n, 1) >>> 16, at(n, 1) & 0xffff]; - const o = [0, 0, 0, 0] as [number, number, number, number]; - o[3] += at(m, 3) + at(n, 3); - o[2] += at(o, 3) >>> 16; - o[3] &= 0xffff; - o[2] += at(m, 2) + at(n, 2); - o[1] += at(o, 2) >>> 16; - o[2] &= 0xffff; - o[1] += at(m, 1) + at(n, 1); - o[0] += at(o, 1) >>> 16; - o[1] &= 0xffff; - o[0] += at(m, 0) + at(n, 0); - o[0] &= 0xffff; - return [(at(o, 0) << 16) | at(o, 1), (at(o, 2) << 16) | at(o, 3)]; -} - -function x64Multiply(m: number[], n: number[]) { - m = [at(m, 0) >>> 16, at(m, 0) & 0xffff, at(m, 1) >>> 16, at(m, 1) & 0xffff]; - n = [at(n, 0) >>> 16, at(n, 0) & 0xffff, at(n, 1) >>> 16, at(n, 1) & 0xffff]; - const o = [0, 0, 0, 0] as [number, number, number, number]; - o[3] += at(m, 3) * at(n, 3); - o[2] += at(o, 3) >>> 16; - o[3] &= 0xffff; - o[2] += at(m, 2) * at(n, 3); - o[1] += at(o, 2) >>> 16; - o[2] &= 0xffff; - o[2] += at(m, 3) * at(n, 2); - o[1] += at(o, 2) >>> 16; - o[2] &= 0xffff; - o[1] += at(m, 1) * at(n, 3); - o[0] += at(o, 1) >>> 16; - o[1] &= 0xffff; - o[1] += at(m, 2) * at(n, 2); - o[0] += at(o, 1) >>> 16; - o[1] &= 0xffff; - o[1] += at(m, 3) * at(n, 1); - o[0] += at(o, 1) >>> 16; - o[1] &= 0xffff; - o[0] += - at(m, 0) * at(n, 3) + - at(m, 1) * at(n, 2) + - at(m, 2) * at(n, 1) + - at(m, 3) * at(n, 0); - o[0] &= 0xffff; - return [(at(o, 0) << 16) | at(o, 1), (at(o, 2) << 16) | at(o, 3)]; -} - -function x64Rotl(m: number[], n: number) { - n %= 64; - if (n === 32) { - return [at(m, 1), at(m, 0)]; - } - if (n < 32) { - return [ - (at(m, 0) << n) | (at(m, 1) >>> (32 - n)), - (at(m, 1) << n) | (at(m, 0) >>> (32 - n)), - ]; - } - n -= 32; - return [ - (at(m, 1) << n) | (at(m, 0) >>> (32 - n)), - (at(m, 0) << n) | (at(m, 1) >>> (32 - n)), - ]; -} - -function x64LeftShift(m: number[], n: number) { - n %= 64; - if (n === 0) { - return m; - } - if (n < 32) { - return [(at(m, 0) << n) | (at(m, 1) >>> (32 - n)), at(m, 1) << n]; - } - return [at(m, 1) << (n - 32), 0]; -} - -function x64Xor(m: number[], n: number[]) { - return [at(m, 0) ^ at(n, 0), at(m, 1) ^ at(n, 1)]; -} - -function x64Fmix(h: number[]) { - h = x64Xor(h, [0, at(h, 0) >>> 1]); - h = x64Multiply(h, [0xff51afd7, 0xed558ccd]); - h = x64Xor(h, [0, at(h, 0) >>> 1]); - h = x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]); - h = x64Xor(h, [0, at(h, 0) >>> 1]); - return h; -} - -function x64hash128(key: string, seed: number) { - key = key || ""; - seed = seed || 0; - const remainder = key.length % 16; - const bytes = key.length - remainder; - let h1 = [0, seed]; - let h2 = [0, seed]; - let k1 = [0, 0]; - let k2 = [0, 0]; - const c1 = [0x87c37b91, 0x114253d5]; - const c2 = [0x4cf5ad43, 0x2745937f]; - let i = 0; - for (i = 0; i < bytes; i = i + 16) { - k1 = [ - (key.charCodeAt(i + 4) & 0xff) | - ((key.charCodeAt(i + 5) & 0xff) << 8) | - ((key.charCodeAt(i + 6) & 0xff) << 16) | - ((key.charCodeAt(i + 7) & 0xff) << 24), - (key.charCodeAt(i) & 0xff) | - ((key.charCodeAt(i + 1) & 0xff) << 8) | - ((key.charCodeAt(i + 2) & 0xff) << 16) | - ((key.charCodeAt(i + 3) & 0xff) << 24), - ]; - k2 = [ - (key.charCodeAt(i + 12) & 0xff) | - ((key.charCodeAt(i + 13) & 0xff) << 8) | - ((key.charCodeAt(i + 14) & 0xff) << 16) | - ((key.charCodeAt(i + 15) & 0xff) << 24), - (key.charCodeAt(i + 8) & 0xff) | - ((key.charCodeAt(i + 9) & 0xff) << 8) | - ((key.charCodeAt(i + 10) & 0xff) << 16) | - ((key.charCodeAt(i + 11) & 0xff) << 24), - ]; - k1 = x64Multiply(k1, c1); - k1 = x64Rotl(k1, 31); - k1 = x64Multiply(k1, c2); - h1 = x64Xor(h1, k1); - h1 = x64Rotl(h1, 27); - h1 = x64Add(h1, h2); - h1 = x64Add(x64Multiply(h1, [0, 5]), [0, 0x52dce729]); - k2 = x64Multiply(k2, c2); - k2 = x64Rotl(k2, 33); - k2 = x64Multiply(k2, c1); - h2 = x64Xor(h2, k2); - h2 = x64Rotl(h2, 31); - h2 = x64Add(h2, h1); - h2 = x64Add(x64Multiply(h2, [0, 5]), [0, 0x38495ab5]); - } - k1 = [0, 0]; - k2 = [0, 0]; - switch (remainder) { - case 15: - k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 14)], 48)); - break; - case 14: - k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 13)], 40)); - break; - case 13: - k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 12)], 32)); - break; - case 12: - k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 11)], 24)); - break; - case 11: - k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 10)], 16)); - break; - case 10: - k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 9)], 8)); - break; - case 9: - k2 = x64Xor(k2, [0, key.charCodeAt(i + 8)]); - k2 = x64Multiply(k2, c2); - k2 = x64Rotl(k2, 33); - k2 = x64Multiply(k2, c1); - h2 = x64Xor(h2, k2); - break; - case 8: - k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 7)], 56)); - break; - case 7: - k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 6)], 48)); - break; - case 6: - k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 5)], 40)); - break; - case 5: - k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 4)], 32)); - break; - case 4: - k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 3)], 24)); - break; - case 3: - k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 2)], 16)); - break; - case 2: - k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 1)], 8)); - break; - case 1: - k1 = x64Xor(k1, [0, key.charCodeAt(i)]); - k1 = x64Multiply(k1, c1); - k1 = x64Rotl(k1, 31); - k1 = x64Multiply(k1, c2); - h1 = x64Xor(h1, k1); - } - h1 = x64Xor(h1, [0, key.length]); - h2 = x64Xor(h2, [0, key.length]); - h1 = x64Add(h1, h2); - h2 = x64Add(h2, h1); - h1 = x64Fmix(h1); - h2 = x64Fmix(h2); - h1 = x64Add(h1, h2); - h2 = x64Add(h2, h1); - return ( - `00000000${(at(h1, 0) >>> 0).toString(16)}`.slice(-8) + - `00000000${(at(h1, 1) >>> 0).toString(16)}`.slice(-8) + - `00000000${(at(h2, 0) >>> 0).toString(16)}`.slice(-8) + - `00000000${(at(h2, 1) >>> 0).toString(16)}`.slice(-8) - ); -} - -type Area = { width: number; height: number }; - -export function picassoCanvas( - roundNumber: number, - seed: number, - params: { - area: Area; - offsetParameter: number; - multiplier: number; - fontSizeFactor: number; - maxShadowBlur: number; - }, -) { - const { area, offsetParameter, multiplier, fontSizeFactor, maxShadowBlur } = - params; - - class Prng { - currentNumber: number; - - constructor(seed: number) { - this.currentNumber = seed % offsetParameter; - if (this.currentNumber <= 0) { - this.currentNumber += offsetParameter; - } - } - - getNext() { - this.currentNumber = (multiplier * this.currentNumber) % offsetParameter; - return this.currentNumber; - } - } - - function adaptRandomNumberToContext( - randomNumber: number, - maxBound: number, - floatAllowed: boolean | undefined, - ) { - randomNumber = (randomNumber - 1) / offsetParameter; - if (floatAllowed) { - return randomNumber * maxBound; - } - - return Math.floor(randomNumber * maxBound); - } - - function addRandomCanvasGradient( - prng: Prng, - context: CanvasRenderingContext2D, - area: Area, - ) { - const canvasGradient = context.createRadialGradient( - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - ); - canvasGradient.addColorStop( - 0, - at( - colors, - adaptRandomNumberToContext(prng.getNext(), colors.length, undefined), - ), - ); - canvasGradient.addColorStop( - 1, - at( - colors, - adaptRandomNumberToContext(prng.getNext(), colors.length, undefined), - ), - ); - context.fillStyle = canvasGradient; - } - - function generateRandomWord(prng: Prng, wordLength: number) { - const minAscii = 65; - const maxAscii = 126; - const wordGenerated: string[] = []; - for (let i = 0; i < wordLength; i++) { - const asciiCode = minAscii + (prng.getNext() % (maxAscii - minAscii)); - wordGenerated.push(String.fromCharCode(asciiCode)); - } - - return wordGenerated.join(""); - } - - if (window.CanvasRenderingContext2D) { - return "unknown"; - } - - const colors: string[] = [ - "#FF6633", - "#FFB399", - "#FF33FF", - "#FFFF99", - "#00B3E6", - "#E6B333", - "#3366E6", - "#999966", - "#99FF99", - "#B34D4D", - "#80B300", - "#809900", - "#E6B3B3", - "#6680B3", - "#66991A", - "#FF99E6", - "#CCFF1A", - "#FF1A66", - "#E6331A", - "#33FFCC", - "#66994D", - "#B366CC", - "#4D8000", - "#B33300", - "#CC80CC", - "#66664D", - "#991AFF", - "#E666FF", - "#4DB3FF", - "#1AB399", - "#E666B3", - "#33991A", - "#CC9999", - "#B3B31A", - "#00E680", - "#4D8066", - "#809980", - "#E6FF80", - "#1AFF33", - "#999933", - "#FF3380", - "#CCCC00", - "#66E64D", - "#4D80CC", - "#9900B3", - "#E64D66", - "#4DB380", - "#FF4D4D", - "#99E6E6", - "#6666FF", - ]; - - const primitives = [ - function arc(prng: Prng, context: CanvasRenderingContext2D, area: Area) { - context.beginPath(); - context.arc( - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - adaptRandomNumberToContext( - prng.getNext(), - Math.min(area.width, area.height), - undefined, - ), - adaptRandomNumberToContext(prng.getNext(), 2 * Math.PI, true), - adaptRandomNumberToContext(prng.getNext(), 2 * Math.PI, true), - ); - context.stroke(); - }, - function text(prng: Prng, context: CanvasRenderingContext2D, area: Area) { - const wordLength = Math.max( - 1, - adaptRandomNumberToContext(prng.getNext(), 5, undefined), - ); - const textToStroke = generateRandomWord(prng, wordLength); - context.font = `${area.height / fontSizeFactor}px aafakefontaa`; - - context.strokeText( - textToStroke, - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - ); - }, - function bezierCurve( - prng: Prng, - context: CanvasRenderingContext2D, - area: Area, - ) { - context.beginPath(); - context.moveTo( - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - ); - context.bezierCurveTo( - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - ); - context.stroke(); - }, - function quadraticCurve( - prng: Prng, - context: CanvasRenderingContext2D, - area: Area, - ) { - context.beginPath(); - context.moveTo( - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - ); - context.quadraticCurveTo( - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - ); - context.stroke(); - }, - function ellipse( - prng: Prng, - context: CanvasRenderingContext2D, - area: Area, - ) { - context.beginPath(); - context.ellipse( - adaptRandomNumberToContext(prng.getNext(), area.width, undefined), - adaptRandomNumberToContext(prng.getNext(), area.height, undefined), - adaptRandomNumberToContext( - prng.getNext(), - Math.floor(area.width / 2), - undefined, - ), - adaptRandomNumberToContext( - prng.getNext(), - Math.floor(area.height / 2), - undefined, - ), - adaptRandomNumberToContext(prng.getNext(), 2 * Math.PI, true), - adaptRandomNumberToContext(prng.getNext(), 2 * Math.PI, true), - adaptRandomNumberToContext(prng.getNext(), 2 * Math.PI, true), - ); - - context.stroke(); - }, - ]; - - try { - const prng = new Prng(seed); - const canvasElt = document.createElement("canvas"); - canvasElt.width = area.width; - canvasElt.height = area.height; - canvasElt.style.display = "none"; - const context = canvasElt.getContext("2d"); - if (context !== null) { - for (let i = 0; i < roundNumber; i++) { - addRandomCanvasGradient(prng, context, area); - context.shadowBlur = adaptRandomNumberToContext( - prng.getNext(), - maxShadowBlur, - undefined, - ); - context.shadowColor = at( - colors, - adaptRandomNumberToContext(prng.getNext(), colors.length, undefined), - ); - const randomPrimitive = at( - primitives, - adaptRandomNumberToContext( - prng.getNext(), - primitives.length, - undefined, - ), - ); - randomPrimitive(prng, context, area); - context.fill(); - } - } - return x64hash128(canvasElt.toDataURL(), seed); - } catch (error) { - throw new Error( - `Error with Captcha canvas. context: ${JSON.stringify(error)}`, - ); - } -} diff --git a/packages/util/src/index.ts b/packages/util/src/index.ts index dba620dc3c..dfc24654e0 100644 --- a/packages/util/src/index.ts +++ b/packages/util/src/index.ts @@ -15,7 +15,6 @@ export * from "./util.js"; export * from "./ofLen.js"; export * from "./lodash.js"; export * from "./isMain.js"; -export * from "./canvas.js"; export * from "./solverService.js"; export * from "./table.js"; export * from "./url.js"; diff --git a/packages/web-components/package.json b/packages/web-components/package.json index e6c0f08433..063252ffe9 100644 --- a/packages/web-components/package.json +++ b/packages/web-components/package.json @@ -1,6 +1,6 @@ { "name": "@prosopo/web-components", - "version": "2.2.3", + "version": "2.3.0", "description": "Non business logic utilities for web applications", "main": "dist/index.js", "type": "module", @@ -37,7 +37,7 @@ "react": "18.3.1" }, "devDependencies": { - "@prosopo/config": "2.2.3", + "@prosopo/config": "2.3.0", "@vitest/coverage-v8": "2.1.1", "concurrently": "9.0.1", "del-cli": "6.0.0", diff --git a/packages/web-components/src/CaptchaPlaceholder.tsx b/packages/web-components/src/CaptchaPlaceholder.tsx index b69164c729..e1c4ea04af 100644 --- a/packages/web-components/src/CaptchaPlaceholder.tsx +++ b/packages/web-components/src/CaptchaPlaceholder.tsx @@ -42,6 +42,7 @@ export const ProcaptchaPlaceholder = ({ maxWidth: WIDGET_MAX_WIDTH, maxHeight: "100%", overflowX: "auto", + ...theme.font, }} > diff --git a/packages/web-components/src/theme.ts b/packages/web-components/src/theme.ts index 7607b25162..f67ed4eb34 100644 --- a/packages/web-components/src/theme.ts +++ b/packages/web-components/src/theme.ts @@ -48,6 +48,11 @@ export const lightTheme = { unit: DEFAULT_SPACING, half: Math.floor(DEFAULT_SPACING / 2), }, + font: { + fontFamily: + 'ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"', + color: "#000", + }, }; export const darkTheme = { @@ -70,4 +75,9 @@ export const darkTheme = { unit: DEFAULT_SPACING, half: Math.floor(DEFAULT_SPACING / 2), }, + font: { + fontFamily: + 'ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"', + color: "#fff", + }, };