diff --git a/.circleci/config.yml b/.circleci/config.yml index ba2029ffb..8348c2a7b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,4 @@ -version: 2.1 +version: 2.1 jobs: checkDependencies: @@ -12,7 +12,7 @@ jobs: checkCandidatesFile: docker: - - image: node:18 + - image: node:22 resource_class: large steps: - checkout @@ -24,7 +24,7 @@ jobs: checkCoreESLint: docker: - - image: node:18 + - image: node:22 resource_class: large steps: - checkout @@ -36,7 +36,7 @@ jobs: checkCommonESLint: docker: - - image: node:18 + - image: node:22 resource_class: large steps: - checkout @@ -49,7 +49,7 @@ jobs: CommonUnitTests: description: "Common Unit Tests" docker: - - image: node:18-bullseye + - image: node:22-bullseye - image: mongo:6.0.9 name: mongodb resource_class: xlarge @@ -67,7 +67,7 @@ jobs: ChaindataIntegrationTests: description: "Chaindata Integration Tests" docker: - - image: node:18-bullseye + - image: node:22-bullseye - image: mongo:6.0.9 name: mongodb resource_class: xlarge @@ -85,7 +85,7 @@ jobs: ApiHandlerIntegrationTests: description: "ApiHandler Integration Tests" docker: - - image: node:18-bullseye + - image: node:22-bullseye - image: mongo:6.0.9 name: mongodb resource_class: xlarge @@ -103,7 +103,7 @@ jobs: NominatorIntegrationTests: description: "Nominator Integration Tests" docker: - - image: node:18-bullseye + - image: node:22-bullseye - image: mongo:6.0.9 name: mongodb resource_class: xlarge @@ -121,7 +121,7 @@ jobs: ScorekeeperIntegrationTests: description: "Scorekeeper Integration Tests" docker: - - image: node:18-bullseye + - image: node:22-bullseye - image: mongo:6.0.9 name: mongodb @@ -140,7 +140,7 @@ jobs: TelemetryIntegrationTests: description: "Telemetry Integration Tests" docker: - - image: node:18-bullseye + - image: node:22-bullseye - image: mongo:6.0.9 name: mongodb diff --git a/.gitignore b/.gitignore index f3f34e58a..7106ecba9 100644 --- a/.gitignore +++ b/.gitignore @@ -28,8 +28,6 @@ dist **/config/main.json **/config/secret.json -redis/ - docs/.DS_Store /packages/core/kusama-matrix.txt /packages/core/polkadot-matrix.txt @@ -43,4 +41,4 @@ docs/.DS_Store build/** dist/** .next/** -coverage/** \ No newline at end of file +coverage/** diff --git a/.yarnrc.yml b/.yarnrc.yml index ef175c47b..7b9cb61c5 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -11,8 +11,3 @@ plugins: pnpMode: loose yarnPath: .yarn/releases/yarn-3.2.2.cjs - -packageExtensions: - esbuild@*: - dependencies: - "@esbuild/linux-arm64": "*" diff --git a/Dockerfile b/Dockerfile index a712d3c11..6c1723b96 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,23 @@ -FROM node:21-slim AS builder -ARG MATRIX_TOKEN -ARG PACKAGE -ENV PACKAGE ${PACKAGE} +FROM node:22-slim AS docs_builder WORKDIR /code COPY docs docs RUN cd docs && npm install && npm run build +FROM node:22-slim +WORKDIR /code +ARG MATRIX_TOKEN +ARG PACKAGE +ENV PACKAGE ${PACKAGE} + +COPY --from=docs_builder /code/docs/build/ /code/docs/build/ + COPY . . RUN --mount=type=cache,target=/code/.yarn/cache \ --mount=type=cache,target=/turbo_cache \ yarn install --immutable && \ - yarn turbo --cache-dir /turbo_cache + yarn turbo --cache-dir /turbo_cache && \ + yarn workspaces focus --production CMD yarn run start:js:${PACKAGE} diff --git a/Dockerfile-dev b/Dockerfile-dev deleted file mode 100644 index 733599d1f..000000000 --- a/Dockerfile-dev +++ /dev/null @@ -1,16 +0,0 @@ -FROM node:18-slim AS builder -RUN apt-get update && apt-get install -y curl -ARG MATRIX_TOKEN -ARG PACKAGE -ENV PACKAGE ${PACKAGE} -COPY . /code -WORKDIR /code -RUN echo "building ${PACKAGE}... " && \ - yarn install && \ - echo "yarn install done. Building...." && \ - yarn build && \ - echo "building ${PACKAGE} done." && \ - apt-get update && \ - apt-get install -y libssl-dev && \ - apt-get clean -CMD yarn run start:dev:${PACKAGE} diff --git a/README.md b/README.md index 8aa5181ec..a3a9ac495 100644 --- a/README.md +++ b/README.md @@ -26,16 +26,13 @@ The nominating backend will routinely change its nominations at every era. The b > A monorepo containing TypeScript microservices for the Thousand Validators Program. -The following is a monorepo of packages for the Thousand Validators Program. Each package is a microservice that can be run independently or together with other microservices. +The following is a monorepo of packages for the Thousand Validators Program. The monorepo is managed using Yarn workspaces, and contains the following packages: - [`packages/common`](packages/common): A package containing common code shared across all microservices. - [`packages/core`](packages/core): A package containing the core logic of the Thousand Validators Program. - [`packages/gateway`](packages/gateway): A package for an API gateway that exposes the backend with a REST API. - [`packages/telemetry`](packages/telemetry): A package for a telemetry client that monitors uptime -- [`packages/worker`](packages/worker): A packages for job queue workers that perform background tasks. - - ## Installation & Setup @@ -43,16 +40,9 @@ The monorepo is managed using Yarn workspaces, and contains the following packag There's a few ways of running the backend with docker containers, either in kubernetes, or with docker-compose. -There is the `Current / Monolith` way of running instances, and the `Microservice` way of running instances. - -`Current / Monolith` Architecture: - -![Current / Monolith Architecture](./docs/architecture/monolith.png) +Current architecture: - -`Microservice` Architecture: - -![Microservice Architecture](./docs/architecture/microservice.png) +![Current Architecture](./docs/architecture/monolith.png) The following are different ways of running in either `Current` or `Microservice` architecture with either `Kusama` or `Polkadot`, and either `Development` or `Production`: @@ -60,18 +50,6 @@ The following are different ways of running in either `Current` or `Microservice - Running as a monolith with production values - `Polkadot Current` - Running as a monolith with production values -- `Kusama Microservice` - - Running as microservices with production values -- `Polkadot Microservice` - - Running as microservices with production values -- `Polkadot Current Dev` - - Running as a monolith with development values -- `Kusama Current Dev` - - Running as a monolith with development values -- `Kusama Microservice Dev` - - Running as microservices with development values -- `Polkadot Microservice Dev` - - Running as microservices with development values Each package contains a `Dockerfile`, which is used for running in production, and `Dockerfile-dev`, which is used for development. The development images will use run with `nodemon` so that each time files is saved/changed it will rebuild the image and restart the container. Any changes for the regular run `Dockerfile` will need a manual rebuilding of the docker image. @@ -86,8 +64,7 @@ cd 1k-validators-be ### Installing System Dependencies Ensure the following are installed on your machine: -- [Node.js](https://nodejs.org/en/) (v12 or higher) -- [Yarn](https://yarnpkg.com/) (v1.22 or higher) +- [Node.js](https://nodejs.org/en/) (v21 or higher) - [Docker](https://www.docker.com/) (v19 or higher) @@ -121,30 +98,6 @@ Polkadot Current / Monolith Dev: yarn docker:polkadot-current-dev:start ``` -Kusama Microservice Production: - -```bash -yarn docker:kusama-microscervice:start -``` - -Kusama Microservice Dev: - -```bash -yarn docker:kusama-microservice-dev:start -``` - -Polkadot Microservice Production: - -```bash -yarn docker:polkadot-current:start -``` - -Polkadot Microservice Dev: - -```bash -yarn docker:polkadot-current-dev:start -``` - ### Install Yarn Dependencies ```bash yarn install @@ -170,50 +123,6 @@ This will create a configuration file for a Kusama instance that mirrors what is yarn create-config-polkadot-current ``` -Kusama Microservice Config: -This will create configuration files for a Kusama instance for each microservice that runs with production values. This runs `core`, `gateway`, `telemetry`, and `worker` as separate processes in their own container - each one needs it's own configuration file. -```bash -yarn create-config-kusama-microservice -``` - -Polkadot Microservice Config: -This will create configuration files for a Polkadot instance for each microservice that runs with production values. This runs `core`, `gateway`, `telemetry`, and `worker` as separate processes in their own container - each one needs it's own configuration file. -```bash -yarn create-config-polkadot-microservice -``` - - - -### Running the Microservices - -#### Running `Kusama Current` or `Polkadot Current`: - -Either is from the same `docker-compose.current.yml` file, and runs only the `core` container, `mongo` container, and `mongo-express` container. - -Build and run as detached daemon: -```bash -docker compose -f docker-compose.current.yml up -d --build -``` - -#### Running `Kusama Microservice` or `Polkadot Microservice`: - -Either is from the same `docker-compose.microservice.yml` file. This runs `core`, `gateway`, `telemetry`, and `worker` as separate processes in their own container - each one needs it's own configuration file. It additionally runs a `redis`, `mongo`, and `mongo-express` container. - -Build and run as detached daemon: -```bash -docker compose -f docker-compose.microservice.yml up -d --build -``` - -#### Running `Kusama Current Dev`, `Polkadot Current Dev`, `Kusama Microservice Dev`, or `Polkadot Microservice Dev` - -Either is from the same `docker-compose.yml` file. - -Build and run as detached daemon: -```bash -docker compose -f docker-compose.yml up -d --build -``` - - ### Viewing Logs To view the aggregated logs of all the containers: @@ -297,9 +206,6 @@ You can then query an endpoint like `/candidates` by going to `http://localhost: To view the Mongo Express GUI to interact with the MongoDB Database, go to `http://localhost:8888/` in your browser. Or run `yarn open:mongo-express` from the root directory. -#### BullMQ Board (Job Queue GUI) - -To view the BullMQ Board GUI to interact with the Job Queue, go to `http://localhost:3301/bull` in your browser if running as microservices. Or run `yarn open:bull` from the root directory. ## :pencil: Contribute diff --git a/apps/1kv-backend-staging/templates/kusama-otv-backend.yaml b/apps/1kv-backend-staging/templates/kusama-otv-backend.yaml index d79e4c857..b63c8c060 100644 --- a/apps/1kv-backend-staging/templates/kusama-otv-backend.yaml +++ b/apps/1kv-backend-staging/templates/kusama-otv-backend.yaml @@ -13,7 +13,7 @@ spec: # syncPolicy: # automated: # prune: true - # selfHeal: true + # selfHeal: true source: repoURL: 'https://github.com/w3f/1k-validators-be.git' path: charts/otv-backend @@ -46,18 +46,21 @@ spec: "apiEndpoints": [ "wss://kusama-rpc-tn.dwellir.com", "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws", + "wss://kusama.public.curie.radiumblock.co/ws", "wss://rpc.ibp.network/kusama", "wss://rpc.dotters.network/kusama", "wss://ksm-rpc.stakeworld.io" ], + "apiPeopleEndpoints": ["wss://kusama-people-rpc.polkadot.io"], "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/kusama.json" }, "constraints": { "skipConnectionTime": true, "skipIdentity": false, - "skipClientUpgrade": false, "skipUnclaimed": true, + "clientUpgrade": { + "skip": false + }, "minSelfStake": 10000000000000, "commission": 150000000, "unclaimedEraThreshold": 4, @@ -65,8 +68,7 @@ spec: "skip": false, "sanctionedCountries": ["RU", "IR", "CU", "KP", "SY"], "sanctionedRegions": ["Crimea", "Autonomous Republic of Crimea", "Republic of Crimea", "Luhansk", "Luhanska Oblast", "Luhanska", "Luganskaya Oblast’", "Luganskaya", "Donetsk", "Donetska Oblast", "Donetskaya Oblast’", "Donetska", "Donetskaya", "Sevastopol City", "Sevastopol", "Gorod Sevastopol"] - }, - "forceClientVersion": "v1.12.0" + } }, "cron": { "monitor": "0 */15 * * * *", diff --git a/apps/1kv-backend-staging/templates/polkadot-otv-backend.yaml b/apps/1kv-backend-staging/templates/polkadot-otv-backend.yaml index 858722979..df4a60d13 100644 --- a/apps/1kv-backend-staging/templates/polkadot-otv-backend.yaml +++ b/apps/1kv-backend-staging/templates/polkadot-otv-backend.yaml @@ -55,8 +55,10 @@ spec: "constraints": { "skipConnectionTime": false, "skipIdentity": false, - "skipClientUpgrade": false, "skipUnclaimed": true, + "clientUpgrade": { + "skip": false + }, "minSelfStake": 50000000000000, "commission": 50000000, "unclaimedEraThreshold": 1, @@ -64,8 +66,7 @@ spec: "skip": false, "sanctionedCountries": ["RU", "IR", "CU", "KP", "SY"], "sanctionedRegions": ["Crimea", "Autonomous Republic of Crimea", "Republic of Crimea", "Luhansk", "Luhanska Oblast", "Luhanska", "Luganskaya Oblast’", "Luganskaya", "Donetsk", "Donetska Oblast", "Donetskaya Oblast’", "Donetska", "Donetskaya", "Sevastopol City", "Sevastopol", "Gorod Sevastopol"] - }, - "forceClientVersion": "v1.12.0" + } }, "cron": { "monitor": "0 */15 * * * *", diff --git a/apps/1kv-backend/templates/kusama-otv-backend.yaml b/apps/1kv-backend/templates/kusama-otv-backend.yaml index e277d8c5e..bd3a384e8 100644 --- a/apps/1kv-backend/templates/kusama-otv-backend.yaml +++ b/apps/1kv-backend/templates/kusama-otv-backend.yaml @@ -13,11 +13,11 @@ spec: # syncPolicy: # automated: # prune: true - # selfHeal: true + # selfHeal: true source: repoURL: https://w3f.github.io/helm-charts/ chart: otv-backend - targetRevision: v3.3.0 + targetRevision: v3.3.1 plugin: env: - name: HELM_VALUES @@ -43,19 +43,22 @@ spec: "apiEndpoints": [ "wss://kusama-rpc-tn.dwellir.com", "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws", + "wss://kusama.public.curie.radiumblock.co/ws", "wss://rpc.ibp.network/kusama", "wss://rpc.dotters.network/kusama", "wss://ksm-rpc.stakeworld.io" ], + "apiPeopleEndpoints": ["wss://kusama-people-rpc.polkadot.io"], "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/kusama.json" }, "constraints": { "skipConnectionTime": false, "skipIdentity": false, "skipStakedDestination": true, - "skipClientUpgrade": false, "skipUnclaimed": true, + "clientUpgrade": { + "skip": false + }, "minSelfStake": 10000000000000, "commission": 150000000, "unclaimedEraThreshold": 4, @@ -63,8 +66,7 @@ spec: "skip": false, "sanctionedCountries": ["RU", "IR", "CU", "KP", "SY"], "sanctionedRegions": ["Crimea", "Autonomous Republic of Crimea", "Republic of Crimea", "Luhansk", "Luhanska Oblast", "Luhanska", "Luganskaya Oblast’", "Luganskaya", "Donetsk", "Donetska Oblast", "Donetskaya Oblast’", "Donetska", "Donetskaya", "Sevastopol City", "Sevastopol", "Gorod Sevastopol"] - }, - "forceClientVersion": "v1.12.0" + } }, "cron": { "monitor": "0 */15 * * * *", diff --git a/apps/1kv-backend/templates/polkadot-otv-backend.yaml b/apps/1kv-backend/templates/polkadot-otv-backend.yaml index 55dd942ef..8f25d88a5 100644 --- a/apps/1kv-backend/templates/polkadot-otv-backend.yaml +++ b/apps/1kv-backend/templates/polkadot-otv-backend.yaml @@ -17,7 +17,7 @@ spec: source: repoURL: https://w3f.github.io/helm-charts/ chart: otv-backend - targetRevision: v3.3.0 + targetRevision: v3.3.1 plugin: env: - name: HELM_VALUES @@ -53,8 +53,10 @@ spec: "skipConnectionTime": false, "skipIdentity": false, "skipStakedDestination": true, - "skipClientUpgrade": false, "skipUnclaimed": true, + "clientUpgrade": { + "skip": false + }, "minSelfStake": 50000000000000, "commission": 50000000, "unclaimedEraThreshold": 1, @@ -62,8 +64,7 @@ spec: "skip": false, "sanctionedCountries": ["RU", "IR", "CU", "KP", "SY"], "sanctionedRegions": ["Crimea", "Autonomous Republic of Crimea", "Republic of Crimea", "Luhansk", "Luhanska Oblast", "Luhanska", "Luganskaya Oblast’", "Luganskaya", "Donetsk", "Donetska Oblast", "Donetskaya Oblast’", "Donetska", "Donetskaya", "Sevastopol City", "Sevastopol", "Gorod Sevastopol"] - }, - "forceClientVersion": "v1.12.0" + } }, "cron": { "monitor": "0 */15 * * * *", diff --git a/charts/otv-backend/Chart.yaml b/charts/otv-backend/Chart.yaml index 63127b1c4..e936430ea 100644 --- a/charts/otv-backend/Chart.yaml +++ b/charts/otv-backend/Chart.yaml @@ -1,5 +1,5 @@ description: 1K Validators Backend name: otv-backend -version: v3.3.0 -appVersion: v3.3.0 +version: v3.3.1 +appVersion: v3.3.1 apiVersion: v2 diff --git a/charts/otv-backend/values.yaml b/charts/otv-backend/values.yaml index 861175842..bcda562b3 100644 --- a/charts/otv-backend/values.yaml +++ b/charts/otv-backend/values.yaml @@ -21,13 +21,16 @@ dataPath: "/data" backendPort: 3300 storageSize: 20Gi -resources: - limits: - cpu: 600m - memory: 1Gi - requests: - cpu: 300m - memory: 400Mi +# Uncomment the following resource to use +# the default suggested resources +# resources: +# limits: +# cpu: 600m +# memory: 1Gi +# requests: +# cpu: 300m +# memory: 400Mi +resources: {} secret: | { diff --git a/docker-compose.current.yml b/docker-compose.current.yml deleted file mode 100644 index d692b1a9a..000000000 --- a/docker-compose.current.yml +++ /dev/null @@ -1,44 +0,0 @@ -version: '3' -services: - 1kv-core: - build: - context: . - args: - PACKAGE: core - dockerfile: ./Dockerfile - ports: - - "127.0.0.1:3300:3300" - networks: - testing_net: - ipv4_address: 172.28.1.1 - - mongo: - image: mongo - restart: always - ports: - - "127.0.0.1:27017:27017" - networks: - testing_net: - ipv4_address: 172.28.1.2 - - mongo-express: - image: mongo-express - environment: - - ME_CONFIG_MONGODB_SERVER=mongo - - ME_CONFIG_MONGODB_PORT=27017 - - ME_CONFIG_MONGODB_ENABLE_ADMIN=true - - ME_CONFIG_MONGODB_AUTH_DATABASE=admin - depends_on: - - mongo - ports: - - "127.0.0.1:8888:8081" - networks: - testing_net: - ipv4_address: 172.28.1.3 - -networks: - testing_net: - ipam: - driver: default - config: - - subnet: 172.28.0.0/16 diff --git a/docker-compose.microservice.yml b/docker-compose.microservice.yml deleted file mode 100644 index f6928d75c..000000000 --- a/docker-compose.microservice.yml +++ /dev/null @@ -1,168 +0,0 @@ -version: '3.8' -services: - - 1kv-core: - build: - context: . - args: - PACKAGE: core - dockerfile: ./Dockerfile - depends_on: - - redis - ports: - - "127.0.0.1:3300:3300" - healthcheck: - test: [ "CMD-SHELL", "curl -f http://localhost:3300/healthcheck" ] - interval: 60s - timeout: 60s - retries: 3 - start_period: 180s - deploy: - restart_policy: - condition: on-failure - delay: 300s - max_attempts: 3 - window: 120s - networks: - testing_net: - ipv4_address: 172.28.1.1 - - 1kv-gateway: - build: - context: . - args: - PACKAGE: gateway - dockerfile: ./Dockerfile - depends_on: - - redis - ports: - - "127.0.0.1:3301:3301" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3301/healthcheck"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 60s - deploy: - restart_policy: - condition: on-failure - delay: 300s - max_attempts: 3 - window: 120s - networks: - testing_net: - ipv4_address: 172.28.1.2 - - - 1kv-telemetry: - build: - context: . - args: - PACKAGE: telemetry - dockerfile: ./Dockerfile - depends_on: - - redis - ports: - - "127.0.0.1:3302:3302" - healthcheck: - test: [ "CMD-SHELL", "curl -f http://localhost:3302/healthcheck" ] - interval: 30s - timeout: 10s - retries: 3 - start_period: 30s - deploy: - restart_policy: - condition: on-failure - delay: 300s - max_attempts: 3 - window: 120s - networks: - testing_net: - ipv4_address: 172.28.1.3 - - 1kv-worker: - build: - context: . - args: - PACKAGE: worker - dockerfile: ./Dockerfile - deploy: - # mode: replicated - # replicas: 8 - restart_policy: - condition: on-failure - delay: 30s - max_attempts: 3 - window: 120s - depends_on: - - redis - - mongo - ports: - - "127.0.0.1:3303:3303" - restart: on-failure - healthcheck: - test: [ "CMD-SHELL", "curl -f http://localhost:3303/healthcheck" ] - interval: 30s - timeout: 60s - retries: 3 - start_period: 180s - networks: - testing_net: -# ipv4_address: 172.28.1.3 - - - mongo: - image: mongo - restart: always - ports: - - "127.0.0.1:27017:27017" - networks: - testing_net: - ipv4_address: 172.28.1.4 - logging: - driver: "json-file" - options: - max-size: "50m" - - mongo-express: - image: mongo-express - environment: - - ME_CONFIG_MONGODB_SERVER=mongo - - ME_CONFIG_MONGODB_PORT=27017 - - ME_CONFIG_MONGODB_ENABLE_ADMIN=true - - ME_CONFIG_MONGODB_AUTH_DATABASE=admin - depends_on: - - mongo - ports: - - "127.0.0.1:8888:8081" - networks: - testing_net: - ipv4_address: 172.28.1.5 - logging: - driver: "json-file" - options: - max-size: "50m" - - redis: - image: redis:alpine - expose: - - "6379" - volumes: - - ./redis:/data - restart: always - command: ["redis-server", "--bind", "172.28.1.6", "--port", "6379"] - logging: - driver: "json-file" - options: - max-size: "50m" - networks: - testing_net: - ipv4_address: 172.28.1.6 - - -networks: - testing_net: - ipam: - driver: default - config: - - subnet: 172.28.0.0/16 diff --git a/docker-compose.yml b/docker-compose.yml index f849e6b2e..d692b1a9a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,218 +1,44 @@ -version: '3.8' +version: '3' services: - - autoheal: - restart: always - image: willfarrell/autoheal - environment: - - AUTOHEAL_CONTAINER_LABEL=all - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - 1kv-core: - environment: - - PACKAGE=core - image: 1kv-core:latest - build: - context: . - args: - PACKAGE: core - dockerfile: ./Dockerfile-dev - restart: on-failure - depends_on: - - redis - - mongo - volumes: - - .:/code - ports: - - "127.0.0.1:3300:3300" - healthcheck: - test: [ "CMD-SHELL", "curl -f http://localhost:3300/healthcheck" ] - interval: 60s - timeout: 60s - retries: 3 - start_period: 180s - deploy: - restart_policy: - condition: on-failure - delay: 300s - max_attempts: 3 - window: 120s - networks: - testing_net: - ipv4_address: 172.28.1.7 - logging: - driver: "json-file" - options: - max-size: "50m" - - 1kv-gateway: - environment: - - PACKAGE=gateway - image: 1kv-gateway:latest - build: - context: . - args: - PACKAGE: gateway - dockerfile: ./Dockerfile-dev - restart: on-failure - depends_on: - - redis - - mongo - volumes: - - .:/code - ports: - - "127.0.0.1:3301:3301" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3301/healthcheck"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 60s - deploy: - restart_policy: - condition: on-failure - delay: 300s - max_attempts: 3 - window: 120s - networks: - testing_net: - ipv4_address: 172.28.1.8 - logging: - driver: "json-file" - options: - max-size: "50m" - - 1kv-telemetry: - environment: - - PACKAGE=telemetry - image: 1kv-telemetry:latest - build: - context: . - args: - PACKAGE: telemetry - dockerfile: ./Dockerfile-dev - restart: on-failure - depends_on: - - redis - - mongo - volumes: - - .:/code - ports: - - "127.0.0.1:3302:3302" - healthcheck: - test: [ "CMD-SHELL", "curl -f http://localhost:3302/healthcheck" ] - interval: 30s - timeout: 10s - retries: 3 - start_period: 30s - deploy: - restart_policy: - condition: on-failure - delay: 300s - max_attempts: 3 - window: 120s - networks: - testing_net: - ipv4_address: 172.28.1.9 - logging: - driver: "json-file" - options: - max-size: "50m" - - 1kv-worker: - environment: - - PACKAGE=worker - image: 1kv-worker:latest - build: - context: . - args: - PACKAGE: worker - dockerfile: ./Dockerfile-dev - volumes: - - .:/code - deploy: -# mode: replicated -# replicas: 8 - restart_policy: - condition: on-failure - delay: 30s - max_attempts: 3 - window: 120s - depends_on: - - redis - - mongo - ports: - - "127.0.0.1:3303:3303" - restart: on-failure - healthcheck: - test: [ "CMD-SHELL", "curl -f http://localhost:3303/healthcheck" ] - interval: 30s - timeout: 60s - retries: 3 - start_period: 180s - networks: - testing_net: -# ipv4_address: 172.28.1.16 - logging: - driver: "json-file" - options: - max-size: "50m" - - mongo: - image: mongo - restart: always - ports: - - "127.0.0.1:27017:27017" - networks: - testing_net: - ipv4_address: 172.28.1.12 - logging: - driver: "json-file" - options: - max-size: "50m" - - mongo-express: - image: mongo-express - environment: - - ME_CONFIG_MONGODB_SERVER=mongo - - ME_CONFIG_MONGODB_PORT=27017 - - ME_CONFIG_MONGODB_ENABLE_ADMIN=true - - ME_CONFIG_MONGODB_AUTH_DATABASE=admin - depends_on: - - mongo - ports: - - "127.0.0.1:8888:8081" - networks: - testing_net: - ipv4_address: 172.28.1.14 - logging: - driver: "json-file" - options: - max-size: "50m" - - redis: - image: redis:latest - ports: - - "127.0.0.1:6379:6379" - expose: - - "6379" - volumes: - - ./redis:/data - restart: always -# command: ["redis-server", "--bind", "172.28.1.13", "--port", "6379"] - command: ["redis-server", "--port", "6379"] - logging: - driver: "json-file" - options: - max-size: "50m" - networks: - testing_net: - ipv4_address: 172.28.1.13 + 1kv-core: + build: + context: . + args: + PACKAGE: core + dockerfile: ./Dockerfile + ports: + - "127.0.0.1:3300:3300" + networks: + testing_net: + ipv4_address: 172.28.1.1 + + mongo: + image: mongo + restart: always + ports: + - "127.0.0.1:27017:27017" + networks: + testing_net: + ipv4_address: 172.28.1.2 + + mongo-express: + image: mongo-express + environment: + - ME_CONFIG_MONGODB_SERVER=mongo + - ME_CONFIG_MONGODB_PORT=27017 + - ME_CONFIG_MONGODB_ENABLE_ADMIN=true + - ME_CONFIG_MONGODB_AUTH_DATABASE=admin + depends_on: + - mongo + ports: + - "127.0.0.1:8888:8081" + networks: + testing_net: + ipv4_address: 172.28.1.3 networks: - testing_net: - ipam: - driver: default - config: - - subnet: 172.28.0.0/16 + testing_net: + ipam: + driver: default + config: + - subnet: 172.28.0.0/16 diff --git a/docs/architecture/microservice.png b/docs/architecture/microservice.png deleted file mode 100644 index 092be7645..000000000 Binary files a/docs/architecture/microservice.png and /dev/null differ diff --git a/docs/docs/backend/backend.md b/docs/docs/backend/backend.md index 2a6715774..e2c3da0be 100644 --- a/docs/docs/backend/backend.md +++ b/docs/docs/backend/backend.md @@ -18,15 +18,13 @@ A monorepo containing TypeScript microservices for the . # Overview -> A monorepo containing TypeScript microservices +> A monorepo containing TypeScript packages The monorepo is managed using Yarn workspaces, and contains the following packages: -- [`packages/common`](packages/common): A package containing common code shared across all microservices. +- [`packages/common`](packages/common): A package containing common code shared across all packages. - [`packages/core`](packages/core): A package containing the core logic of the Thousand Validators Program. - [`packages/gateway`](packages/gateway): A package for an API gateway that exposes the backend with a REST API. - [`packages/telemetry`](packages/telemetry): A package for a telemetry client that monitors uptime -- [`packages/worker`](packages/worker): A packages for job queue workers that perform background tasks. - ## Installation & Setup @@ -35,39 +33,10 @@ The monorepo is managed using Yarn workspaces, and contains the following packag There's a few ways of running the backend with docker containers, either in kubernetes, or with docker-compose. -There is the `Current / Monolith` way of running instances, and the `Microservice` way of running instances. - -`Current / Monolith` Architecture: - -![Current / Monolith Architecture](../../architecture/monolith.png) - - -`Microservice` Architecture: - -![Microservice Architecture](../../architecture/microservice.png) +Current Architecture: -The following are different ways of running in either `Current` or `Microservice` architecture with either `Kusama` or `Polkadot`, and either `Development` or `Production`: +![Current Architecture](../../architecture/monolith.png) -- `Kusama Current` - - Running as a monolith with production values -- `Polkadot Current` - - Running as a monolith with production values -- `Kusama Microservice` - - Running as microservices with production values -- `Polkadot Microservice` - - Running as microservices with production values -- `Polkadot Current Dev` - - Running as a monolith with development values -- `Kusama Current Dev` - - Running as a monolith with development values -- `Kusama Microservice Dev` - - Running as microservices with development values -- `Polkadot Microservice Dev` - - Running as microservices with development values - -Each package contains a `Dockerfile`, which is used for running in production, and `Dockerfile-dev`, which is used for development. The development images will use run with `nodemon` so that each time files is saved/changed it will rebuild the image and restart the container. Any changes for the regular run `Dockerfile` will need a manual rebuilding of the docker image. - -The difference of running as either `Current` or `Microservice` is in which docker containers get run with `docker-compose` (Microservices have services separated out as their own containers, and additionally rely on Redis for messages queues). Outside of this everything else (whether it's run as a Kusama or Polkadot instance) is determined by the JSON configuration files that get generated. ### Cloning the Repository ```bash @@ -180,32 +149,13 @@ yarn create-config-polkadot-microservice #### Running `Kusama Current` or `Polkadot Current`: -Either is from the same `docker-compose.current.yml` file, and runs only the `core` container, `mongo` container, and `mongo-express` container. - -Build and run as detached daemon: -```bash -docker compose -f docker-compose.current.yml up -d --build -``` - -#### Running `Kusama Microservice` or `Polkadot Microservice`: - -Either is from the same `docker-compose.microservice.yml` file. This runs `core`, `gateway`, `telemetry`, and `worker` as separate processes in their own container - each one needs it's own configuration file. It additionally runs a `redis`, `mongo`, and `mongo-express` container. - -Build and run as detached daemon: -```bash -docker compose -f docker-compose.microservice.yml up -d --build -``` - -#### Running `Kusama Current Dev`, `Polkadot Current Dev`, `Kusama Microservice Dev`, or `Polkadot Microservice Dev` - -Either is from the same `docker-compose.yml` file. +Either is from the same `docker-compose.yml` file, and runs only the `core` container, `mongo` container, and `mongo-express` container. Build and run as detached daemon: ```bash docker compose -f docker-compose.yml up -d --build ``` - ### Viewing Logs To view the aggregated logs of all the containers: diff --git a/docs/docs/backend/config.md b/docs/docs/backend/config.md index bb85480b5..d8203d8bc 100644 --- a/docs/docs/backend/config.md +++ b/docs/docs/backend/config.md @@ -42,7 +42,8 @@ An example config may look something like: - `dryRun`: Boolean (true/false). If set to true, the Nominator accounts that are added will calculate what a nomination would look like (how many and which validators), but not craft or submit any transactions. No nominations will be done when this flag is set. In the `nominate` function of the `Nominator` class, the `dryRun` flag is checked, and if it is set to true, the function will return after logging the validators it would nominate without doing anything. This flag is optional and set to `false` by default. - `networkPrefix`: Integer. Defines the network prefix. For Kusama, this is `2`, and for Polkadot, this is `0`. It can be set to `3` for running a local test network, although this isn't used much anymore. **This flag is required for `core` and `worker` services.** -- `apiEndpoints`: Array of strings. Lists the RPC endpoints for the chain. When given a list of multiple, it will pick one at random to create a websocket connection to - this single connection is used throughout the entire service for any queries or submitting transactions. **This is required for `core` and `worker` services. +- `apiEndpoints`: Array of strings. Lists the RPC endpoints for the chain. When given a list of multiple, it will pick one at random to create a websocket connection to - this single connection is used throughout the entire service for any queries or submitting transactions. **This is required for `core` and `worker` services.** +- `apiPeopleEndpoints`: Optional array of strings. Lists the RPC endpoints for People parachain, if it's enabled on the network. - `bootstrap`: Boolean. An **optional** flag that can be set to `true` to enable the bootstrap process. This can be used when running a instance of the backend and would query the main Kusama or Polkadot instances at the api endpoints specified below to populate the db with non-deterministic values like `rank` or `discoveredAt`. _This isn't currently used anywhere yet_ - `kusamaBootstrapEndpoint`: String. URL for the Kusama bootstrap endpoint. **optional**. _This isn't currently used anywhere yet_. - `polkadotBootstrapEndpoint`: String. URL for the Polkadot bootstrap endpoint. **optional**. _This isn't currently used anywhere yet_. @@ -56,9 +57,10 @@ An example config may look something like: "constraints": { "skipConnectionTime": true, "skipIdentity": false, - "skipClientUpgrade": false, "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", + "clientUpgrade": { + "skip": false + }, "minSelfStake": 10000000000000, "commission": 150000000, "unclaimedEraThreshold": 4 @@ -69,9 +71,9 @@ The `constraints` section defines validity constraint parameters for validators, - `skipConnectionTime`: Boolean. Skips checking the 7 day required connection time if set to true. __optional__, defaults to `false`. - `skipIdentity`: Boolean. Skips the check for a verified identity. __optional__, defaults to `false`. -- `skipClientUpgrade`: Boolean. Skips client version upgrade check. __optional__, defaults to `false`. - `skipUnclaimed`: Boolean. Skips the check for unclaimed rewards. __optional__, defaults to `false`. -- `forceClientVersion`: String. Specific client version to be enforced. __optional__, if this is set, it will allow versions higher than what is specified. +- `clientUpgrade.skip`: Boolean. Skips client version upgrade check. __optional__, defaults to `false`. +- `clientUpgrade.forceVersion`: String. Specific client version to be enforced. __optional__, if this is set, it will allow versions >= than what is specified. - `minSelfStake`: Integer. Minimum self-stake required. **required**. This number needs to be specified in `Plancks` (1 DOT = 10^10 Plancks, 1 KSM = 10^12 Plancks). - `commission`: Integer. Max commission rate. **required**. This number needs to be specified in chain units that have 6 decimal places - for example `150000000` corresponds to 15% commission. - `unclaimedEraThreshold`: Integer. Threshold for unclaimed eras. **required**. A validator having pending rewards for past eras longer than this threshold will be deemed invalid. This gets skipped if `skipUnclaimed` is set to `true`. This number is speciefied as number of eras, so `4` for example means validators are invalid if they have pending rewards older than 4 eras ago. @@ -358,24 +360,6 @@ The format - `forceRound`: Boolean. upon `scorekeeper` starting, will initiate new nominations immediately, regardless of the time since the last nomination. **required**, defaults to `false`. This can be useful to do nominations when there are issues with proxy transations getting stuck for example. - `nominating`: Boolean. Indicates whether the nominator account will create and submit transactions or not. **required**. Nominators will only submit transactions when this is set to `true`, otherwise when a nomination is supposed to occur the process will not do anything when set to `false`. -## Redis - -Configuration for Redis. Redis is used when run as microservices for messages queue passing. When run as a monolith it is not used and not required. When run as microservices, `core`, `gateway`, and `worker` will need to have their own redis parameters specified in their respective config files. - -An example config may look something like: - -```json - "redis": { - "enable": true, - "host": "redis", - "port": 6379 - }, -``` - -- `enable`: Boolean. Enables or disables Redis. **optional**. defaults to `false if not specified -- `host`: String. Redis host. **required** if run as microservices, **optional** if not. -- `port`: Integer. Redis port. **required** if run as microservices, **optional** if not. - ## Server THe `gateway` package uses Koa to serve various db queries from specified endpoints. `gateway` may either be run as a monolith or as a microservice. If run as a microservice, the `gateway` service will need to have its own `server` parameters specified in its config file. @@ -459,9 +443,10 @@ An example `core` config run as microservices may look something like: "constraints": { "skipConnectionTime": true, "skipIdentity": false, - "skipClientUpgrade": false, "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", + "clientUpgrade": { + "skip": false + }, "minSelfStake": 10000000000000, "commission": 150000000, "unclaimedEraThreshold": 4 @@ -505,11 +490,6 @@ An example `core` config run as microservices may look something like: "forceRound": false, "nominating": false }, - "redis": { - "enable": true, - "host": "redis", - "port": 6379 - }, "server": { "enable": false, "port": 3300 @@ -541,11 +521,6 @@ An example gateway config run as microservices may look something like: "uri": "mongodb://mongo:27017" } }, - "redis": { - "enable": true, - "host": "redis", - "port": 6379 - }, "server": { "enable": true, "port": 3301, @@ -637,12 +612,7 @@ An example Worker config run as microservices may look something like: "useOpenGovDelegation": true, "useRpc": true, "useClient": true - }, - "redis": { - "enable": true, - "host": "redis", - "port": 6379 } } -``` \ No newline at end of file +``` diff --git a/helmfile.d/config/kusama/otv-backend-ci.yaml.gotmpl b/helmfile.d/config/kusama/otv-backend-ci.yaml.gotmpl index 854cb5326..bc2234fca 100644 --- a/helmfile.d/config/kusama/otv-backend-ci.yaml.gotmpl +++ b/helmfile.d/config/kusama/otv-backend-ci.yaml.gotmpl @@ -22,20 +22,22 @@ config: | "apiEndpoints": [ "wss://kusama-rpc-tn.dwellir.com", "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws", + "wss://kusama.public.curie.radiumblock.co/ws", "wss://rpc.ibp.network/kusama", "wss://rpc.dotters.network/kusama", "wss://ksm-rpc.stakeworld.io" ], + "apiPeopleEndpoints": ["wss://kusama-people-rpc.polkadot.io"], "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/kusama.json" }, "constraints": { "skipConnectionTime": false, "skipIdentity": false, "skipStakedDestination": true, - "skipClientUpgrade": false, "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", + "clientUpgrade": { + "skip": false + }, "minSelfStake": 10000000000000000000, "commission": 150000000, "unclaimedEraThreshold": 4 diff --git a/helmfile.d/config/kusama/otv-backend-local.yaml.gotmpl b/helmfile.d/config/kusama/otv-backend-local.yaml.gotmpl index cc9e6fa1e..ba8a017db 100644 --- a/helmfile.d/config/kusama/otv-backend-local.yaml.gotmpl +++ b/helmfile.d/config/kusama/otv-backend-local.yaml.gotmpl @@ -24,9 +24,10 @@ config: | "skipConnectionTime": false, "skipIdentity": false, "skipStakedDestination": true, - "skipClientUpgrade": false, "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", + "clientUpgrade": { + "skip": false + }, "minSelfStake": 10000000000000000000, "commission": 150000000, "unclaimedEraThreshold": 4 diff --git a/helmfile.d/config/polkadot/otv-backend-ci.yaml.gotmpl b/helmfile.d/config/polkadot/otv-backend-ci.yaml.gotmpl index 27bb1ff75..7e46208fd 100644 --- a/helmfile.d/config/polkadot/otv-backend-ci.yaml.gotmpl +++ b/helmfile.d/config/polkadot/otv-backend-ci.yaml.gotmpl @@ -32,9 +32,10 @@ config: | "skipConnectionTime": false, "skipIdentity": false, "skipStakedDestination": false, - "skipClientUpgrade": false, "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", + "clientUpgrade": { + "skip": false + }, "minSelfStake": 50000000000000, "commission": 50000000, "unclaimedEraThreshold": 1 diff --git a/helmfile.d/config/polkadot/otv-backend-local.yaml.gotmpl b/helmfile.d/config/polkadot/otv-backend-local.yaml.gotmpl index f16e1f0c2..38bad4ffa 100644 --- a/helmfile.d/config/polkadot/otv-backend-local.yaml.gotmpl +++ b/helmfile.d/config/polkadot/otv-backend-local.yaml.gotmpl @@ -24,9 +24,10 @@ config: | "skipConnectionTime": false, "skipIdentity": false, "skipStakedDestination": false, - "skipClientUpgrade": false, "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", + "clientUpgrade": { + "skip": false + }, "minSelfStake": 50000000000000, "commission": 50000000, "unclaimedEraThreshold": 1 diff --git a/package.json b/package.json index 2b7c7171e..d8afa8b59 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,6 @@ "workspaces": [ "packages/scorekeeper-status-ui", "packages/common", - "packages/worker", "packages/gateway", "packages/telemetry", "packages/core" @@ -16,46 +15,21 @@ "scorekeeper-status-ui:build": "cd packages/scorekeeper-status-ui && npm build", "scorekeeper-status-ui:dev": "yarn workspace @1kv/scorekeeper-status-ui dev", "open:polkadot-apps": "open-cli https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/staking", - "open:bull": "open-cli http://localhost:3301/bull", - "open:mongo-express: ": "open-cli http://localhost:8888", + "open:mongo-express": "open-cli http://localhost:8888", "create-config-kusama-current": "yarn workspace @1kv/core run create-config-kusama-current", "create-config-polkadot-current": "yarn workspace @1kv/core run create-config-polkadot-current", - "create-config-kusama-current-dev": "yarn workspace @1kv/core run create-config-kusama-current-dev", - "create-config-polkadot-current-dev": "yarn workspace @1kv/core run create-config-polkadot-current-dev", - "create-config-kusama-microservice": "yarn workspaces foreach run create-config-kusama-microservice", - "create-config-polkadot-microservice": "yarn workspaces foreach run create-config-polkadot-microservice", - "create-config-kusama-microservice-dev": "yarn workspaces foreach run create-config-kusama-microservice-dev", - "create-config-polkadot-microservice-dev": "yarn workspaces foreach run create-config-polkadot-microservice-dev", - "docker:kusama-current:start": "yarn run create-config-kusama-current && docker compose -f docker-compose.current.yml up -d --build && yarn run docker:logs", - "docker:polkadot-current:start": "yarn run create-config-polkadot-current && docker compose -f docker-compose.current.yml up -d --build && yarn run docker:logs", - "docker:kusama-current-dev:start": "yarn run create-config-kusama-current-dev && docker compose -f docker-compose.yml up -d --build && yarn run docker:logs", - "docker:polkadot-current-dev:start": "yarn run create-config-polkadot-current-dev && docker compose -f docker-compose.yml up -d --build && yarn run docker:logs", - "docker:kusama-microservice:start": "yarn run create-config-kusama-microservice && docker compose -f docker-compose.microservice.yml up -d --build && yarn run docker:logs", - "docker:kusama-microservice-dev:start": "yarn run create-config-kusama-microservice-dev && docker compose -f docker-compose.yml up -d --build && yarn run docker:logs", - "docker:polkadot-microservice:start": "yarn run create-config-polkadot-microservice && docker compose -f docker-compose.microservice.yml up -d --build && yarn run docker:logs", - "docker:polkadot-microservice-dev:start": "yarn run create-config-polkadot-microservice-dev && docker compose -f docker-compose.yml up -d --build && yarn run docker:logs", + "docker:kusama-current:start": "yarn run create-config-kusama-current && docker compose -f docker-compose.yml up -d --build && yarn run docker:logs", + "docker:polkadot-current:start": "yarn run create-config-polkadot-current && docker compose -f docker-compose.yml up -d --build && yarn run docker:logs", "docker:logs": "docker compose logs -f", "docker:logs:core": "docker logs 1k-validators-be-1kv-core-1 -f", - "docker:logs:gateway": "docker logs 1k-validators-be-1kv-gateway-1 -f", - "docker:logs:telemetry": "docker logs 1k-validators-be-1kv-telemetry-1 -f", - "docker:logs:worker": "docker logs 1k-validators-be-1kv-worker-1 -f", "docker:stop": "docker compose down", "lint": "yarn workspaces foreach run lint", "lint:fix": "yarn workspaces foreach run lint:fix", - "clean": "rm -rf redis/ && yarn workspaces foreach run clean", + "clean": "yarn workspaces foreach run clean", "build": "yarn run docs && yarn workspaces foreach -t run build", - "build:prod": "yarn workspaces foreach -pt run build:prod", - "build:core": "yarn workspace @1kv/common run build run build && yarn workspace @1kv/gateway run build && yarn workspace @1kv/telemetry run build && yarn workspace @1kv/worker run build && yarn workspace @1kv/core run build", "build:clean": "yarn workspaces foreach run clean:build", - "start:dev:gateway": "yarn workspace @1kv/gateway run start:dev", - "start:js:gateway": "NODE_OPTIONS='--max-old-space-size=10096' yarn workspace @1kv/gateway run js:start", "start:dev:core": "yarn workspace @1kv/core run start:dev", "start:js:core": "NODE_OPTIONS='--max-old-space-size=10096' yarn workspace @1kv/core run js:start", - "start:dev:telemetry": "yarn workspace @1kv/telemetry run start:dev", - "start:js:telemetry": "NODE_OPTIONS='--max-old-space-size=10096' yarn workspace @1kv/telemetry run js:start", - "start:dev:worker": "yarn workspace @1kv/worker run start:dev", - "start:js:worker": "NODE_OPTIONS='--max-old-space-size=10096' yarn workspace @1kv/worker run js:start", - "test:core": "yarn workspace @1kv/core run test", "test:common:int": "yarn workspace @1kv/common run test:int", "test:common:unit": "yarn workspace @1kv/common run test:unit", "test:common:unit:ci": "circleci local execute CommonUnitTests", @@ -72,15 +46,19 @@ "turbo": "turbo build" }, "devDependencies": { - "@ava/typescript": "^4.1.0", - "@babel/preset-react": "^7.23.3", + "@types/cron": "^2.4.0", + "@types/koa": "^2.15.0", + "@types/koa-bodyparser": "^4.3.12", + "@types/mongoose": "^5.11.97", + "@types/node": "^20.11.5", + "@types/semver": "^7.5.8", + "@types/ws": "^8.5.10", "@typescript-eslint/eslint-plugin": "^5.59.9", "@typescript-eslint/parser": "^5.59.9", + "@vitest/coverage-istanbul": "^1.3.1", + "@vitest/coverage-v8": "^1.3.1", "@vitest/ui": "^1.3.1", - "ava": "^6.1.2", "concurrently": "^8.2.2", - "esbuild": "^0.20.1", - "esbuild-plugin-node-polyfill": "^0.0.1", "eslint": "8.42.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "5.0.0", @@ -88,9 +66,11 @@ "nodemon": "^3.1.0", "open-cli": "^8.0.0", "prettier": "^3.2.4", - "typedoc": "^0.25.12", - "typedoc-plugin-markdown": "^3.17.1", + "ts-node": "^10.9.2", + "turbo": "v2.0.3", + "typescript": "^5.3.3", "vite": "^5.1.6", + "vite-plugin-dts": "^3.7.3", "vite-plugin-node": "^3.1.0", "vite-tsconfig-paths": "^4.3.1", "vitest": "^1.3.1" @@ -99,40 +79,21 @@ "@1kv/common": "workspace:*", "@1kv/gateway": "workspace:*", "@1kv/telemetry": "workspace:*", - "@1kv/worker": "workspace:*", - "@bull-board/api": "^5.15.1", - "@bull-board/koa": "^5.15.0", "@koa/router": "^12.0.1", "@octokit/rest": "^20.0.2", - "@polkadot/api": "^11.1.1", + "@polkadot/api": "^11.2.1", "@polkadot/keyring": "^12.6.2", - "@types/cron": "^2.4.0", - "@types/jest": "^29.5.12", - "@types/koa": "^2.15.0", - "@types/koa-bodyparser": "^4.3.12", - "@types/mongoose": "^5.11.97", - "@types/node": "^20.11.5", - "@types/semver": "^7.5.8", - "@types/ws": "^8.5.10", - "@vitest/coverage-istanbul": "^1.3.1", - "@vitest/coverage-v8": "^1.3.1", "axios": "^1.6.7", - "bree": "^9.2.2", - "bs58": "^5.0.0", - "bullmq": "^5.4.2", "chalk": "5.3.0", "coingecko-api-v3": "^0.0.29", "commander": "^12.0.0", "cron": "^3.1.6", - "esbuild-node-builtins": "^0.1.0", + "date-fns": "^3.6.0", "eventemitter3": "^5.0.1", - "hash.js": "^1.1.7", - "jest": "^29.7.0", "koa": "^2.15.0", "koa-bodyparser": "^4.4.1", "koa-cash": "^4.1.1", "koa-mount": "^4.0.0", - "koa-send": "^5.0.1", "koa-static": "^5.0.0", "koa-swagger-decorator": "^1.8.7", "koa2-cors": "^2.0.6", @@ -141,24 +102,11 @@ "mongodb": "6.5.0", "mongodb-memory-server": "^9.1.7", "mongoose": "^8.2.1", - "node-fetch": "3.3.2", "prettier": "^3.2.4", - "reconnecting-websocket": "^4.4.0", - "request": "^2.88.2", "semver": "^7.6.0", "swagger-jsdoc": "^6.2.8", "swagger2": "^4.0.3", "swagger2-koa": "^4.0.0", - "ts-jest": "^29.1.2", - "ts-node": "^10.9.2", - "turbo": "^1.12.5", - "turborepo": "^0.0.1", - "typescript": "^5.3.3", - "vite": "^5.1.6", - "vite-plugin-dts": "^3.7.3", - "vite-plugin-node": "^3.1.0", - "vite-tsconfig-paths": "^4.3.1", - "vitest": "^1.3.1", "winston": "^3.12.0", "ws": "^8.16.0", "yamljs": "^0.3.0" diff --git a/packages/common/Dockerfile b/packages/common/Dockerfile deleted file mode 100644 index 8fd6d5bed..000000000 --- a/packages/common/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM node:17-slim -ARG MATRIX_TOKEN -WORKDIR /code -COPY . . -RUN ["npm", "i"] -RUN ["npm", "run", "build"] -CMD ["npm", "run", "js:start"] diff --git a/packages/common/Dockerfile-dev b/packages/common/Dockerfile-dev deleted file mode 100644 index 7b2ec4f15..000000000 --- a/packages/common/Dockerfile-dev +++ /dev/null @@ -1,4 +0,0 @@ -FROM node:18 AS builder -COPY . /app -WORKDIR /app -RUN npm install -g typescript && yarn set version 3.2.2 && yarn install && yarn workspace @1kv/common build diff --git a/packages/common/esbuild.js b/packages/common/esbuild.js deleted file mode 100644 index 8bd0743c8..000000000 --- a/packages/common/esbuild.js +++ /dev/null @@ -1,98 +0,0 @@ -import esbuild from "esbuild"; - -const isProduction = process.argv.includes("--prod"); - -const externalPackages = [ - "@polkadot/api-augment", - "velocityjs", - "dustjs-linkedin", - "atpl", - "liquor", - "twig", - "eco", - "jazz", - "jqtpl", - "hamljs", - "hamlet", - "whiskers", - "haml-coffee", - "hogan.js", - "templayed", - "underscore", - "walrus", - "mustache", - "just", - "ect", - "mote", - "toffee", - "dot", - "bracket-template", - "ractive", - "htmling", - "babel-core", - "plates", - "vash", - "slm", - "marko", - "teacup/lib/express", - "coffee-script", - "squirrelly", - "twing", - "matris-js-sdk", - "@1kv/telemetry", - "@1kv/gateway", - "@1kv/common", - "mongoose", - "logform", - "winston", - "ws", - "form-data", - "combined-stream", - "proxy-from-env", - "follow-redirects", - "cron", - "coingecko-api-v3", - "matrix-js-sdk", - "node-mongodb-native", - "mongoose", -]; - -const buildOptions = { - entryPoints: ["src/index.ts"], - bundle: true, - minify: isProduction, - platform: "node", - target: "node18", - external: externalPackages, - outdir: "build", - tsconfig: "tsconfig.json", - // splitting: true, - format: "esm", - sourcemap: !isProduction, - logLevel: "info", -}; - -if (process.argv.includes("--watch")) { - buildOptions.watch = { - onRebuild(error, result) { - if (error) console.error("watch build failed:", error); - else - console.log( - "watch build succeeded at", - new Date().toLocaleTimeString(), - ); - }, - }; - console.log("watch mode enabled"); -} - -if (isProduction) { - buildOptions.define = { - "process.env.NODE_ENV": "'production'", - }; -} - -esbuild.build(buildOptions).catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/common/package.json b/packages/common/package.json index 0d49037e1..6a9f0d316 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,26 +1,25 @@ { "name": "@1kv/common", - "version": "3.3.0", + "version": "3.3.1", "description": "Services for running the Thousand Validator Program.", "main": "build/index.js", "types": "build/index.d.ts", "scripts": { "build": "tsc --build tsconfig.json", - "build:prod": "node esbuild.js --prod", "docker": "docker-compose rm -f; docker-compose build --no-cache; docker-compose up -d", "lint": "../../node_modules/.bin/eslint 'src/**/*.{js,ts,tsx}' --quiet", "lint:fix": "../../node_modules/.bin/eslint 'src/**/*.{js,ts,tsx, json}' --quiet --fix", "clean": "../../node_modules/.bin/rimraf ./build tsconfig.tsbuildinfo combined.log", "clean:build": "yarn clean && yarn build", "writeCandidatesFile": "../../node_modules/.bin/esbuild src/scripts/writeCandidatesFile.ts --platform=node --bundle | node && yarn lint:fix", - "test:unit": "SKIP_MD5=true LOG_LEVEL=info ../../node_modules/.bin/vitest --config vitest.unit.config.mts --no-file-parallelism --coverage", - "test:unit:silent": "SKIP_MD5=true LOG_LEVEL=warn ../../node_modules/.bin/vitest --config vitest.unit.config.mts --no-file-parallelism --coverage", - "test:int": "SKIP_MD5=true LOG_LEVEL=info ../../node_modules/.bin/vitest --config vitest.int.config.mts --no-file-parallelism --coverage", - "test:int:silent": "SKIP_MD5=true LOG_LEVEL=warn ../../node_modules/.bin/vitest --config vitest.int.config.mts --no-file-parallelism --coverage", - "test:chaindata:int": " ../../node_modules/.bin/vitest chaindata.int.test.ts -c vitest.int.config.mts --coverage", - "test:apihandler:int": " ../../node_modules/.bin/vitest ApiHandler.int.test.ts -c vitest.int.config.mts --coverage", - "test:nominator:int": "../../node_modules/.bin/vitest Nominator.int.test.ts -c vitest.int.config.mts --coverage", - "test:scorekeeper:int": "../../node_modules/.bin/vitest scorekeeper.int.test.ts NumNominations.int.test.ts -c vitest.int.config.mts --coverage", + "test:unit": "SKIP_MD5=true LOG_LEVEL=info ../../node_modules/.bin/vitest --config vitest.unit.config.mts --run --no-file-parallelism --coverage", + "test:unit:silent": "SKIP_MD5=true LOG_LEVEL=warn ../../node_modules/.bin/vitest --config vitest.unit.config.mts --run --no-file-parallelism --coverage", + "test:int": "SKIP_MD5=true LOG_LEVEL=info ../../node_modules/.bin/vitest --config vitest.int.config.mts --run --no-file-parallelism --coverage", + "test:int:silent": "SKIP_MD5=true LOG_LEVEL=warn ../../node_modules/.bin/vitest --config vitest.int.config.mts --run --no-file-parallelism --coverage", + "test:chaindata:int": " ../../node_modules/.bin/vitest chaindata.int.test.ts -c vitest.int.config.mts --coverage --run", + "test:apihandler:int": " ../../node_modules/.bin/vitest ApiHandler.int.test.ts -c vitest.int.config.mts --coverage --run", + "test:nominator:int": "../../node_modules/.bin/vitest Nominator.int.test.ts -c vitest.int.config.mts --coverage --run", + "test:scorekeeper:int": "../../node_modules/.bin/vitest scorekeeper.int.test.ts NumNominations.int.test.ts -c vitest.int.config.mts --coverage --run", "test": "yarn test:unit && yarn test:int", "ci:checkCandidatesFile": "../../node_modules/.bin/ts-node src/scripts/ci/checkCandidatesFile.ts" }, diff --git a/packages/common/src/ApiHandler/ApiHandler.ts b/packages/common/src/ApiHandler/ApiHandler.ts index 123564c56..ac1142f22 100644 --- a/packages/common/src/ApiHandler/ApiHandler.ts +++ b/packages/common/src/ApiHandler/ApiHandler.ts @@ -2,7 +2,6 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; import EventEmitter from "eventemitter3"; import logger from "../logger"; -import { sleep } from "../utils/util"; import { API_PROVIDER_TIMEOUT, POLKADOT_API_TIMEOUT } from "../constants"; export const apiLabel = { label: "ApiHandler" }; @@ -12,167 +11,147 @@ export const apiLabel = { label: "ApiHandler" }; * to a different provider if one proves troublesome. */ class ApiHandler extends EventEmitter { - private _wsProvider?: WsProvider; - private _api: ApiPromise | null = null; - private readonly _endpoints: string[] = []; - static isConnected = false; - private healthCheckInProgress = false; - private _currentEndpoint?: string; - public upSince: number = Date.now(); + private wsProvider?: WsProvider; + private api: ApiPromise | null = null; + private readonly endpoints: string[] = []; + + // If we're reconnecting right now, awaiting on this promise will block until connection succedes + private connectionAttempt: Promise | null = null; + + public upSince = -1; + public isConnected = false; + constructor(endpoints: string[]) { super(); - this._endpoints = endpoints.sort(() => Math.random() - 0.5); - this.upSince = Date.now(); + this.endpoints = endpoints.sort(() => Math.random() - 0.5); } - async healthCheck(retries = 0): Promise { - if (retries < 10) { + /** + * This copies connectWithRetry() logic from WsProvider + * The issue with original logic is that `autoConnectMs` is set to 0 when disconnect() is called, but we + * want to call it from nextEndpoint() + * + * This function can be called multiple times, and it'll wait on the same promise, without spamming reconnects. + * @see https://github.com/polkadot-js/api/blob/2ef84c5dcdbbff8aec9ba01e4f13a50130d1a6f3/packages/rpc-provider/src/ws/index.ts#L239-L271 + */ + private async connectWithRetry(): Promise { + if (!this.wsProvider) { + throw new Error( + "connectWithRetry() is called before initializing WsProvider", + ); + } + + if (this.connectionAttempt instanceof Promise) { + await this.connectionAttempt; + return; + } + + this.isConnected = false; + this.connectionAttempt = new Promise(async (resolve) => { try { - this.healthCheckInProgress = true; - let chain; - - const isConnected = this._wsProvider?.isConnected; - if (isConnected && !this._api?.isConnected) { - try { - chain = await this._api?.rpc.system.chain(); - } catch (e) { - await sleep(API_PROVIDER_TIMEOUT); - } - } - chain = await this._api?.rpc.system.chain(); - - if (isConnected && chain) { - this.healthCheckInProgress = false; - return true; - } else { - await sleep(API_PROVIDER_TIMEOUT); - logger.info(`api still disconnected, disconnecting.`, apiLabel); - await this._wsProvider?.disconnect(); - await this.getProvider(this._endpoints); - await this.getAPI(); - return false; - } - } catch (e: unknown) { - const errorMessage = - e instanceof Error ? e.message : "An unknown error occurred"; - logger.error( - `Error in health check for WS Provider for rpc. ${errorMessage}`, + await this.wsProvider.connect(); + + await new Promise((resolve, reject) => { + const unsubConnect = this.wsProvider.on("connected", resolve); + const unsubDisconnect = this.wsProvider.on("disconnected", reject); + this.connectionAttempt.finally(() => { + unsubConnect(); + unsubDisconnect(); + }); + }); + + this.connectionAttempt = null; + this.upSince = Date.now(); + this.isConnected = true; + logger.info(`Connected to ${this.currentEndpoint()}`, apiLabel); + resolve(); + } catch (err) { + logger.warn( + `Connection attempt to ${this.currentEndpoint()} failed: ${JSON.stringify(err)}, trying next endpoint`, apiLabel, ); - this.healthCheckInProgress = false; - return false; + setTimeout(() => { + this.connectionAttempt = null; + this.connectWithRetry().then(resolve); + }, API_PROVIDER_TIMEOUT); } - } - return false; - } + }); - public currentEndpoint() { - return this._currentEndpoint; + await this.connectionAttempt; } - async getProvider(endpoints: string[]): Promise { - return await new Promise((resolve, reject) => { - const wsProvider = new WsProvider( - endpoints, - 5000, - undefined, - POLKADOT_API_TIMEOUT, - ); + /** + * In case of errors like RPC rate limit, we might want to force endpoint change + * PJS handles endpoint rotation internally, changing the endpoint on every next connection attempt. + * We only disconnect here; reconnect happens inside `"disconnected"` event handler + */ + async nextEndpoint() { + logger.info("Rotating API endpoint", apiLabel); + await this.wsProvider.disconnect(); + await this.connectWithRetry(); + } - wsProvider.on("disconnected", async () => { - try { - const isHealthy = await this.healthCheck(); - logger.info( - `[Disconnection] ${this._currentEndpoint}} Health check result: ${isHealthy}`, - apiLabel, - ); - resolve(wsProvider); - } catch (error: any) { - logger.warn( - `WS provider for rpc ${endpoints[0]} disconnected!`, - apiLabel, - ); - reject(error); - } - }); - wsProvider.on("connected", () => { - logger.info(`WS provider for rpc ${endpoints[0]} connected`, apiLabel); - this._currentEndpoint = endpoints[0]; - resolve(wsProvider); - }); - wsProvider.on("error", async () => { - try { - const isHealthy = await this.healthCheck(); - logger.info( - `[Error] ${this._currentEndpoint} Health check result: ${isHealthy}`, - apiLabel, - ); - resolve(wsProvider); - } catch (error: any) { - logger.error(`Error thrown for rpc ${this._endpoints[0]}`, apiLabel); - reject(error); - } - }); - }); + currentEndpoint(): string | undefined { + return this.wsProvider?.endpoint; } - async getAPI(retries = 0): Promise { - if (this._wsProvider && this._api && this._api?.isConnected) { - return this._api; + private async healthCheck(): Promise { + if (this.connectionAttempt instanceof Promise) { + return; } - const endpoints = this._endpoints.sort(() => Math.random() - 0.5); - try { - logger.info( - `[getAPI]: try ${retries} creating provider with endpoint ${endpoints[0]}`, + const api = await this.getApi(); + await api.rpc.system.chain(); + } catch (err) { + logger.warn( + `Healthcheck on ${this.currentEndpoint()} failed: ${JSON.stringify(err)}, trying next endpoint`, apiLabel, ); - const provider = await this.getProvider(endpoints); - this._wsProvider = provider; - logger.info( - `[getAPI]: provider created with endpoint: ${endpoints[0]}`, - apiLabel, - ); - const api = await ApiPromise.create({ - provider: provider, - noInitWarn: true, - }); - await api.isReadyOrError; - logger.info(`[getApi] Api is ready`, apiLabel); - return api; - } catch (e) { - if (retries < 15) { - return await this.getAPI(retries + 1); - } else { - const provider = await this.getProvider(endpoints); - return await ApiPromise.create({ - provider: provider, - noInitWarn: true, - }); - } + await this.nextEndpoint(); } } - async setAPI() { - const api = await this.getAPI(0); - this._api = api; - this._registerEventHandlers(this._api); - return api; - } + /** + * This function provides access to PJS api. While the ApiPromise instance never changes, + * the function will block if we're reconnecting. + * It's intended to be called every time instead of saving ApiPromise instance long-term. + */ + async getApi(): Promise { + if (!this.wsProvider) { + this.wsProvider = new WsProvider( + this.endpoints, + false, // Do not autoconnect + undefined, + POLKADOT_API_TIMEOUT, + ); + await this.connectWithRetry(); + this.wsProvider.on("disconnected", () => { + logger.warn(`WsProvider disconnected`, apiLabel); + this.connectWithRetry(); + }); + } + if (!this.api) { + this.api = await ApiPromise.create({ + provider: this.wsProvider, + noInitWarn: true, + }); + await this.api.isReady; + this.registerEventHandlers(this.api); - isConnected(): boolean { - return this._wsProvider?.isConnected || false; - } + // healthcheck queries RPC, thus its interval can't be shorter than RPC timout + setInterval(() => { + void this.healthCheck(); + }, POLKADOT_API_TIMEOUT); + } - getApi(): ApiPromise | null { - if (!this._api) { - return null; - } else { - return this._api; + if (this.connectionAttempt instanceof Promise) { + await this.connectionAttempt; } + + return this.api; } - _registerEventHandlers(api: ApiPromise): void { + private registerEventHandlers(api: ApiPromise): void { if (!api) { logger.warn(`API is null, cannot register event handlers.`, apiLabel); return; diff --git a/packages/common/src/ApiHandler/__mocks__/ApiHandler.ts b/packages/common/src/ApiHandler/__mocks__/ApiHandler.ts index 50365edcf..a411b7636 100644 --- a/packages/common/src/ApiHandler/__mocks__/ApiHandler.ts +++ b/packages/common/src/ApiHandler/__mocks__/ApiHandler.ts @@ -1,37 +1,30 @@ import EventEmitter from "eventemitter3"; import { ApiPromise } from "@polkadot/api"; +import { vi } from "vitest"; const createMockApiPromise = (): any => ({ - isConnected: jest.fn().mockReturnValue(true), + isConnected: vi.fn().mockReturnValue(true), query: { system: { - events: jest.fn().mockImplementation((callback) => callback([])), // Simplified; adjust as needed + events: vi.fn().mockImplementation((callback) => callback([])), // Simplified; adjust as needed }, }, isReadyOrError: Promise.resolve(), // Use the function itself to provide a new instance for the 'create' method - create: jest.fn().mockImplementation(() => createMockApiPromise()), + create: vi.fn().mockImplementation(() => createMockApiPromise()), // Add more mocked methods and properties as needed }); // A mock class for ApiHandler class ApiHandlerMock extends EventEmitter { - private _endpoints: string[]; - private _api: ApiPromise = createMockApiPromise as unknown as ApiPromise; - private healthCheckInProgress = false; + private endpoints: string[]; + private api: ApiPromise = createMockApiPromise as unknown as ApiPromise; constructor(endpoints: string[]) { super(); // Initialize with mock data or behavior as needed - this._endpoints = endpoints.sort(() => Math.random() - 0.5); - } - - async healthCheck(): Promise { - this.healthCheckInProgress = true; - // Simulate the health check logic; adjust the logic as needed for your tests - const isConnected = this._api.isConnected; - this.healthCheckInProgress = false; - return isConnected; + this.endpoints = endpoints.sort(() => Math.random() - 0.5); + this.api = createMockApiPromise(); } async getProvider(endpoints: string[]): Promise { @@ -42,25 +35,15 @@ class ApiHandlerMock extends EventEmitter { return undefined; } - async getAPI(retries = 0): Promise { - // Use the mockApiPromise directly for simplicity - return this._api; - } - - async setAPI(): Promise { - // Directly set the mock _api; in a real scenario, you might want to simulate more complex logic - this._api = await this.getAPI(); - } - - isConnected(): boolean { - return this._api.isConnected; + get isConnected(): boolean { + return this.api.isConnected; } - getApi(): ApiPromise { - return this._api; + async getApi(): Promise { + return this.api; } - _registerEventHandlers(api: ApiPromise): void { + private registerEventHandlers(api: ApiPromise): void { // Simplify the event handler registration for testing purposes // In a real scenario, you might want to simulate more complex event handling api.query.system.events((events) => { diff --git a/packages/common/src/chaindata/chaindata.ts b/packages/common/src/chaindata/chaindata.ts index 8ea155a6d..70009da6d 100644 --- a/packages/common/src/chaindata/chaindata.ts +++ b/packages/common/src/chaindata/chaindata.ts @@ -1,7 +1,6 @@ -import { ApiPromise, WsProvider } from "@polkadot/api"; import ApiHandler, { apiLabel } from "../ApiHandler/ApiHandler"; import logger from "../logger"; -import { NumberResult } from "../types"; +import { ApiHandlers, NumberResult } from "../types"; import { getApiAt, getApiAtBlockHash, @@ -59,86 +58,26 @@ import { getNominators, NominatorInfo, } from "./queries/Nomination"; -import { CHAINDATA_RETRIES } from "../constants"; import { Identity } from "../db"; import { Block } from "@polkadot/types/interfaces"; import { ApiDecoration } from "@polkadot/api/types"; -type JSON = any; - export const chaindataLabel = { label: "Chaindata" }; +export enum HandlerType { + RelayHandler, + PeopleHandler, +} + export class ChainData { public handler: ApiHandler; - public api: ApiPromise | null; - public apiPeople: ApiPromise | null; + public peopleHandler: ApiHandler; - constructor(handler: ApiHandler) { - this.handler = handler; - this.api = handler.getApi(); - this.setApiPeople(); + constructor(handlers: ApiHandlers) { + this.handler = handlers.relay; + this.peopleHandler = handlers.people; } - setApiPeople = async (): Promise => { - if (!(await this.api.rpc.system.chain()).toLowerCase().includes("kusama")) - return; - - const provider = new WsProvider("wss://kusama-people-rpc.polkadot.io"); - this.apiPeople = await ApiPromise.create({ provider: provider }); - if (this.apiPeople) { - this.apiPeople.on("error", (error) => { - if ( - error.toString().includes("FATAL") || - JSON.stringify(error).includes("FATAL") - ) { - logger.error("The API had a FATAL error... exiting!"); - process.exit(1); - } - }); - } - await this.apiPeople.isReadyOrError; - - const [chain, nodeName, nodeVersion] = await Promise.all([ - this.apiPeople.rpc.system.chain(), - this.apiPeople.rpc.system.name(), - this.apiPeople.rpc.system.version(), - ]); - logger.info( - `You are connected to chain ${chain} using ${nodeName} v${nodeVersion}`, - apiLabel, - ); - return; - }; - - checkApiConnection = async (retries = 0): Promise => { - // Check if the API is already connected - if (this.handler.getApi()?.isConnected) { - return true; // API is connected - } - - // If not connected and retries are available - if (retries < CHAINDATA_RETRIES) { - await this.delay(1000); // Wait before retrying - return await this.checkApiConnection(retries + 1); // Recursive call with incremented retries - } - - // If no retries left, perform health check - logger.warn("Performing health check on api...", chaindataLabel); - const api = this.handler.getApi(); - if (api) { - await api.disconnect(); // Ensure disconnect is called on an existing API instance - } - const healthy = await this.handler.healthCheck(); - - if (healthy) { - this.api = this.handler.getApi(); - return true; // Health check passed, API is healthy - } - - // Exceeded retries without connecting and health check failed - return false; - }; - // Helper function to introduce delay delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); @@ -386,15 +325,25 @@ export class ChainData { }; } -export const handleError = async (chaindata, e, functionName: string) => { +export const handleError = async ( + chaindata, + e, + functionName: string, + handlerType: HandlerType, +) => { const errorMessage = e instanceof Error ? e.message : String(e); + + const handler = + handlerType === HandlerType.PeopleHandler + ? chaindata.peopleHandler + : chaindata.handler; if (errorMessage.includes("RPC rate limit exceeded")) { logger.warn( - `RPC rate limit exceeded from ${chaindata.handler.currentEndpoint()}. Switching to a different endpoint.`, + `RPC rate limit exceeded from ${handler.currentEndpoint()}. Switching to a different endpoint.`, apiLabel, ); try { - await chaindata.handler.setAPI(); + await handler.nextEndpoint(); } catch (error) { logger.error( `Error while switching to a different endpoint: ${error}`, diff --git a/packages/common/src/chaindata/queries/ChainMeta.ts b/packages/common/src/chaindata/queries/ChainMeta.ts index 5bda59330..3509529c7 100644 --- a/packages/common/src/chaindata/queries/ChainMeta.ts +++ b/packages/common/src/chaindata/queries/ChainMeta.ts @@ -4,7 +4,7 @@ * @function ChainMeta */ -import { ChainData, handleError } from "../chaindata"; +import { ChainData, handleError, HandlerType } from "../chaindata"; import { ApiDecoration } from "@polkadot/api/types"; import { Block } from "@polkadot/types/interfaces"; @@ -13,17 +13,14 @@ export const getChainType = async ( chaindata: ChainData, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - - const chainType = await chaindata?.api?.rpc.system.chain(); + const api = await chaindata.handler.getApi(); + const chainType = await api.rpc.system.chain(); if (chainType) { return chainType.toString(); } return null; } catch (e) { - await handleError(chaindata, e, "getChainType"); + await handleError(chaindata, e, "getChainType", HandlerType.RelayHandler); return null; } }; @@ -32,19 +29,14 @@ export const getDenom = async ( chaindata: ChainData, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } + const api = await chaindata.handler.getApi(); - const chainType = await chaindata?.api?.rpc.system.chain(); - if (!chainType) { - return null; - } - const denom = - chainType.toString() == "Polkadot" ? 10000000000 : 1000000000000; - return denom; + const chainProps = await api.registry.getChainProperties(); + const decimals = chainProps.tokenDecimals.toJSON()[0]; + + return 10 ** decimals; } catch (e) { - await handleError(chaindata, e, "getDenom"); + await handleError(chaindata, e, "getDenom", HandlerType.RelayHandler); return null; } }; @@ -54,18 +46,15 @@ export const getApiAt = async ( blockNumber: number, ): Promise | null> => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const hash = await chaindata.getBlockHash(blockNumber); if (hash) { - return (await chaindata?.api?.at(hash)) ?? null; + const api = await chaindata.handler.getApi(); + return (await api.at(hash)) ?? null; } else { return null; } } catch (e) { - await handleError(chaindata, e, "getApiAt"); + await handleError(chaindata, e, "getApiAt", HandlerType.RelayHandler); return null; } }; @@ -74,10 +63,7 @@ export const getApiAtBlockHash = async ( blockHash: string, ): Promise | null> => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const api = chaindata?.api; + const api = await chaindata.handler.getApi(); if (api) { const apiResult = await api.at(blockHash); return apiResult ?? null; @@ -85,7 +71,12 @@ export const getApiAtBlockHash = async ( return null; } } catch (e) { - await handleError(chaindata, e, "getApiAtBlockHash"); + await handleError( + chaindata, + e, + "getApiAtBlockHash", + HandlerType.RelayHandler, + ); return null; } }; @@ -95,17 +86,14 @@ export const getBlockHash = async ( blockNumber: number, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - - const hash = await chaindata?.api?.rpc.chain.getBlockHash(blockNumber); + const api = await chaindata.handler.getApi(); + const hash = await api.rpc.chain.getBlockHash(blockNumber); if (hash) { return hash.toString(); } return null; } catch (e) { - await handleError(chaindata, e, "getBlockHash"); + await handleError(chaindata, e, "getBlockHash", HandlerType.RelayHandler); return null; } }; @@ -115,18 +103,16 @@ export const getBlock = async ( blockNumber: number, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } const hash = await chaindata.getBlockHash(blockNumber); if (hash) { - const signedBlock = await chaindata?.api?.rpc.chain.getBlock(hash); + const api = await chaindata.handler.getApi(); + const signedBlock = await api.rpc.chain.getBlock(hash); return signedBlock?.block ?? null; } else { return null; } } catch (e) { - await handleError(chaindata, e, "getBlock"); + await handleError(chaindata, e, "getBlock", HandlerType.RelayHandler); return null; } }; @@ -135,13 +121,11 @@ export const getLatestBlock = async ( chaindata: ChainData, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const block = await chaindata?.api?.rpc.chain.getBlock(); + const api = await chaindata.handler.getApi(); + const block = await api.rpc.chain.getBlock(); return block?.block.header.number.toNumber() ?? null; } catch (e) { - await handleError(chaindata, e, "getLatestBlock"); + await handleError(chaindata, e, "getLatestBlock", HandlerType.RelayHandler); return null; } }; @@ -149,16 +133,19 @@ export const getLatestBlockHash = async ( chaindata: ChainData, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const hash = await chaindata?.api?.rpc.chain.getBlockHash(); + const api = await chaindata.handler.getApi(); + const hash = await api.rpc.chain.getBlockHash(); if (hash) { return hash.toString(); } return null; } catch (e) { - await handleError(chaindata, e, "getLatestBlockHash"); + await handleError( + chaindata, + e, + "getLatestBlockHash", + HandlerType.RelayHandler, + ); return null; } }; diff --git a/packages/common/src/chaindata/queries/Era.ts b/packages/common/src/chaindata/queries/Era.ts index 277d41c10..2a5be8030 100644 --- a/packages/common/src/chaindata/queries/Era.ts +++ b/packages/common/src/chaindata/queries/Era.ts @@ -1,4 +1,4 @@ -import ChainData, { handleError } from "../chaindata"; +import ChainData, { handleError, HandlerType } from "../chaindata"; import logger from "../../logger"; import { NumberResult, StringResult } from "../../types"; import { @@ -13,14 +13,10 @@ export const getEraAt = async ( apiAt: ApiDecoration<"promise">, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - return ((await apiAt.query.staking.activeEra()).toJSON() as any) .index as number; } catch (e) { - await handleError(chaindata, e, "getEraAt"); + await handleError(chaindata, e, "getEraAt", HandlerType.RelayHandler); return null; } }; @@ -34,14 +30,12 @@ export interface EraPointsInfo { eraPoints: number; }>; } + export const getTotalEraPoints = async ( chaindata: ChainData, era: number, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return {} as EraPointsInfo; - } const chainType = await chaindata.getChainType(); if (!chainType) { return {} as EraPointsInfo; @@ -52,7 +46,8 @@ export const getTotalEraPoints = async ( ); if (blockHash) { - const apiAt = await chaindata?.api?.at(blockHash); + const api = await chaindata.handler.getApi(); + const apiAt = await api.at(blockHash); if (!apiAt) { return {} as EraPointsInfo; @@ -77,7 +72,12 @@ export const getTotalEraPoints = async ( } return {} as EraPointsInfo; } catch (e) { - await handleError(chaindata, e, "getTotalEraPoints"); + await handleError( + chaindata, + e, + "getTotalEraPoints", + HandlerType.RelayHandler, + ); return {} as EraPointsInfo; } }; @@ -88,10 +88,6 @@ export const getErasMinStakeAt = async ( era: number, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const denom: number | null = await chaindata.getDenom(); if (denom === null) { return null; @@ -114,7 +110,12 @@ export const getErasMinStakeAt = async ( return minStake[0]?.total; } } catch (e) { - await handleError(chaindata, e, "getErasMinStakeAt"); + await handleError( + chaindata, + e, + "getErasMinStakeAt", + HandlerType.RelayHandler, + ); return null; } }; @@ -123,10 +124,8 @@ export const getActiveEraIndex = async ( chaindata: ChainData, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return [0, "API not connected"]; - } - const activeEra = await chaindata?.api?.query.staking.activeEra(); + const api = await chaindata.handler.getApi(); + const activeEra = await api.query.staking.activeEra(); if (!activeEra || activeEra.isNone) { logger.info(`NO ACTIVE ERA:`); return [ @@ -137,7 +136,12 @@ export const getActiveEraIndex = async ( const activeEraNumber = activeEra.unwrap().index.toNumber(); return [activeEraNumber, null]; } catch (e) { - await handleError(chaindata, e, "getActiveEraIndex"); + await handleError( + chaindata, + e, + "getActiveEraIndex", + HandlerType.RelayHandler, + ); return [0, JSON.stringify(e)]; } }; @@ -146,13 +150,11 @@ export const getCurrentEra = async ( chaindata: ChainData, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const currentEra = await chaindata?.api?.query.staking.currentEra(); + const api = await chaindata.handler.getApi(); + const currentEra = await api.query.staking.currentEra(); return Number(currentEra); } catch (e) { - await handleError(chaindata, e, "getCurrentEra"); + await handleError(chaindata, e, "getCurrentEra", HandlerType.RelayHandler); return null; } }; @@ -163,9 +165,6 @@ export const findEraBlockHash = async ( chainType: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return ["", "API not connected."]; - } const eraBlockLength = chainType == "Kusama" ? KUSAMA_APPROX_ERA_LENGTH_IN_BLOCKS @@ -173,8 +172,6 @@ export const findEraBlockHash = async ( ? POLKADOT_APPROX_ERA_LENGTH_IN_BLOCKS : TESTNET_APPROX_ERA_LENGTH_IN_BLOCKS; - await chaindata.checkApiConnection(); - const [activeEraIndex, err] = await chaindata.getActiveEraIndex(); if (err) { return ["", err]; @@ -184,7 +181,8 @@ export const findEraBlockHash = async ( return ["", "Era has not happened."]; } - const latestBlock = await chaindata?.api?.rpc.chain.getBlock(); + const api = await chaindata.handler.getApi(); + const latestBlock = await api.rpc.chain.getBlock(); if (!latestBlock) { return ["", "Latest block is null"]; } @@ -202,7 +200,7 @@ export const findEraBlockHash = async ( if (!blockHash) { return ["", "Block hash is null"]; } - const apiAt = await chaindata?.api?.at(blockHash); + const apiAt = await api.at(blockHash); if (!apiAt) { return ["", "API at block hash is null"]; } @@ -227,7 +225,12 @@ export const findEraBlockHash = async ( } return ["", "Not Found!"]; } catch (e) { - await handleError(chaindata, e, "findEraBlockHash"); + await handleError( + chaindata, + e, + "findEraBlockHash", + HandlerType.RelayHandler, + ); return ["", JSON.stringify(e)]; } }; @@ -238,9 +241,6 @@ export const findEraBlockNumber = async ( chainType: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return [0, "API not connected."]; - } const eraBlockLength = chainType == "Kusama" ? KUSAMA_APPROX_ERA_LENGTH_IN_BLOCKS @@ -248,8 +248,6 @@ export const findEraBlockNumber = async ( ? POLKADOT_APPROX_ERA_LENGTH_IN_BLOCKS : TESTNET_APPROX_ERA_LENGTH_IN_BLOCKS; - await chaindata.checkApiConnection(); - const [activeEraIndex, err] = await chaindata.getActiveEraIndex(); if (err) { return [0, err]; @@ -281,9 +279,10 @@ export const findEraBlockNumber = async ( if (!blockHash) { return [0, "Block hash is null"]; } + + const api = await chaindata.handler.getApi(); const testEra = - (await chaindata?.api?.query.staking.activeEra.at(blockHash)) || - undefined; // Handle possible undefined + (await api.query.staking.activeEra.at(blockHash)) || undefined; // Handle possible undefined if (!testEra || testEra.isNone) { logger.info(`Test era is none`); return [0, "Test era is none"]; @@ -303,7 +302,12 @@ export const findEraBlockNumber = async ( } return [0, "Not Found!"]; } catch (e) { - await handleError(chaindata, e, "findEraBlockNumber"); + await handleError( + chaindata, + e, + "findEraBlockNumber", + HandlerType.RelayHandler, + ); return [0, JSON.stringify(e)]; } }; diff --git a/packages/common/src/chaindata/queries/Identity.ts b/packages/common/src/chaindata/queries/Identity.ts index d6d90d3b5..8e8a2c2ff 100644 --- a/packages/common/src/chaindata/queries/Identity.ts +++ b/packages/common/src/chaindata/queries/Identity.ts @@ -1,4 +1,4 @@ -import Chaindata, { handleError } from "../chaindata"; +import Chaindata, { handleError, HandlerType } from "../chaindata"; import { Identity } from "../../types"; export const hasIdentity = async ( @@ -6,7 +6,7 @@ export const hasIdentity = async ( account: string, ): Promise<[boolean, boolean]> => { try { - const api = chaindata.apiPeople ? chaindata.apiPeople : chaindata.api; + const api = await chaindata.peopleHandler.getApi(); if (!api?.isConnected) { return [false, false]; @@ -33,7 +33,7 @@ export const hasIdentity = async ( return [identity ? identity.isSome : false, verified]; } catch (e) { - if (!chaindata.apiPeople) await handleError(chaindata, e, "hasIdentity"); + await handleError(chaindata, e, "hasIdentity", HandlerType.PeopleHandler); return [false, true]; } }; @@ -43,7 +43,8 @@ export const getFormattedIdentity = async ( addr: string, ): Promise => { try { - const api = chaindata.apiPeople ? chaindata.apiPeople : chaindata.api; + const api = await chaindata.peopleHandler.getApi(); + if (!api?.isConnected) { return null; } @@ -155,8 +156,12 @@ export const getFormattedIdentity = async ( return identity; } catch (e) { - if (!chaindata.apiPeople) - await handleError(chaindata, e, "getFormattedIdentity"); + await handleError( + chaindata, + e, + "getFormattedIdentity", + HandlerType.PeopleHandler, + ); return null; } }; diff --git a/packages/common/src/chaindata/queries/Nomination.ts b/packages/common/src/chaindata/queries/Nomination.ts index 241636fd5..0f1756b1d 100644 --- a/packages/common/src/chaindata/queries/Nomination.ts +++ b/packages/common/src/chaindata/queries/Nomination.ts @@ -1,13 +1,11 @@ -import Chaindata, { handleError } from "../chaindata"; +import Chaindata, { handleError, HandlerType } from "../chaindata"; export const getNominatorAddresses = async ( chaindata: Chaindata, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } - const nominators = await chaindata.api?.query.staking.nominators.entries(); + const api = await chaindata.handler.getApi(); + const nominators = await api.query.staking.nominators.entries(); const nominatorMap = nominators ?.map((nominator) => { const [key, targets] = nominator; @@ -22,7 +20,12 @@ export const getNominatorAddresses = async ( .filter((address) => address !== undefined) as string[]; return nominatorMap; } catch (e) { - await handleError(chaindata, e, "getNominatorAddresses"); + await handleError( + chaindata, + e, + "getNominatorAddresses", + HandlerType.RelayHandler, + ); return []; } }; @@ -37,11 +40,8 @@ export const getNominators = async ( chaindata: Chaindata, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } - const nominatorEntries = - await chaindata.api?.query.staking.nominators.entries(); + const api = await chaindata.handler.getApi(); + const nominatorEntries = await api.query.staking.nominators.entries(); if (!nominatorEntries) { return []; } @@ -66,7 +66,7 @@ export const getNominators = async ( }), ); } catch (e) { - await handleError(chaindata, e, "getNominators"); + await handleError(chaindata, e, "getNominators", HandlerType.RelayHandler); return []; } }; @@ -77,14 +77,16 @@ export const getNominatorLastNominationEra = async ( address: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const lastNominationEra = - await chaindata.api?.query.staking.nominators(address); + const api = await chaindata.handler.getApi(); + const lastNominationEra = await api.query.staking.nominators(address); return lastNominationEra?.unwrapOrDefault().submittedIn.toNumber() || null; } catch (e) { - await handleError(chaindata, e, "getNominatorLastNominationEra"); + await handleError( + chaindata, + e, + "getNominatorLastNominationEra", + HandlerType.RelayHandler, + ); return null; } }; @@ -95,13 +97,16 @@ export const getNominatorCurrentTargets = async ( address: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const targets = await chaindata.api?.query.staking.nominators(address); + const api = await chaindata.handler.getApi(); + const targets = await api.query.staking.nominators(address); return targets?.unwrapOrDefault().targets.toJSON() as string[]; } catch (e) { - await handleError(chaindata, e, "getNominatorCurrentTargets"); + await handleError( + chaindata, + e, + "getNominatorCurrentTargets", + HandlerType.RelayHandler, + ); return null; } }; diff --git a/packages/common/src/chaindata/queries/Proxy.ts b/packages/common/src/chaindata/queries/Proxy.ts index 2c46ed2ce..0766ca507 100644 --- a/packages/common/src/chaindata/queries/Proxy.ts +++ b/packages/common/src/chaindata/queries/Proxy.ts @@ -1,4 +1,4 @@ -import { ChainData, handleError } from "../chaindata"; +import { ChainData, handleError, HandlerType } from "../chaindata"; export interface ProxyAnnouncement { real: string; @@ -11,11 +11,8 @@ export const getProxyAnnouncements = async ( address: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } - const announcements = - await chaindata.api?.query.proxy.announcements(address); + const api = await chaindata.handler.getApi(); + const announcements = await api.query.proxy.announcements(address); if (!announcements) { return []; } @@ -36,7 +33,12 @@ export const getProxyAnnouncements = async ( return []; } } catch (e) { - await handleError(chaindata, e, "getProxyAnnouncements"); + await handleError( + chaindata, + e, + "getProxyAnnouncements", + HandlerType.RelayHandler, + ); return []; } }; diff --git a/packages/common/src/chaindata/queries/Session.ts b/packages/common/src/chaindata/queries/Session.ts index 299fb9643..70134c94f 100644 --- a/packages/common/src/chaindata/queries/Session.ts +++ b/packages/common/src/chaindata/queries/Session.ts @@ -4,25 +4,22 @@ * @function Sessio */ -import { ChainData, handleError } from "../chaindata"; +import { ChainData, handleError, HandlerType } from "../chaindata"; import { ApiDecoration } from "@polkadot/api/types"; export const getSession = async ( chaindata: ChainData, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - - const currentIndex = await chaindata?.api?.query.session.currentIndex(); + const api = await chaindata.handler.getApi(); + const currentIndex = await api.query.session.currentIndex(); if (currentIndex !== undefined) { return Number(currentIndex.toString()); } else { return null; } } catch (e) { - await handleError(chaindata, e, "getSession"); + await handleError(chaindata, e, "getSession", HandlerType.RelayHandler); return null; } }; @@ -32,14 +29,10 @@ export const getSessionAt = async ( apiAt: ApiDecoration<"promise">, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const session = (await apiAt.query.session.currentIndex()).toString(); return parseInt(session.replace(/,/g, "")); } catch (e) { - await handleError(chaindata, e, "getSessionAt"); + await handleError(chaindata, e, "getSessionAt", HandlerType.RelayHandler); return null; } }; @@ -49,9 +42,6 @@ export const getSessionAtEra = async ( era: number, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } const chainType = await chaindata.getChainType(); if (chainType) { const [blockHash, err] = await chaindata.findEraBlockHash(era, chainType); @@ -64,7 +54,12 @@ export const getSessionAtEra = async ( } return null; } catch (e) { - await handleError(chaindata, e, "getSessionAtEra"); + await handleError( + chaindata, + e, + "getSessionAtEra", + HandlerType.RelayHandler, + ); return null; } }; diff --git a/packages/common/src/chaindata/queries/ValidatorPref.ts b/packages/common/src/chaindata/queries/ValidatorPref.ts index ec716b6da..f0ca6ece4 100644 --- a/packages/common/src/chaindata/queries/ValidatorPref.ts +++ b/packages/common/src/chaindata/queries/ValidatorPref.ts @@ -1,5 +1,9 @@ import { NumberResult } from "../../types"; -import ChainData, { chaindataLabel, handleError } from "../chaindata"; +import ChainData, { + chaindataLabel, + handleError, + HandlerType, +} from "../chaindata"; import logger from "../../logger"; import { ApiDecoration } from "@polkadot/api/types"; @@ -8,16 +12,14 @@ export const getCommission = async ( validator: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return [0, "API not connected."]; - } - const prefs = await chaindata?.api?.query.staking.validators(validator); + const api = await chaindata.handler.getApi(); + const prefs = await api.query.staking.validators(validator); if (!prefs) { return [0, "No preferences found."]; } return [prefs.commission.toNumber(), null]; } catch (e) { - await handleError(chaindata, e, "getCommission"); + await handleError(chaindata, e, "getCommission", HandlerType.RelayHandler); return [0, JSON.stringify(e)]; } }; @@ -29,16 +31,18 @@ export const getCommissionInEra = async ( validator: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } const prefs = await apiAt?.query?.staking.erasValidatorPrefs( eraIndex, validator, ); return prefs?.commission?.toNumber(); } catch (e) { - await handleError(chaindata, e, "getCommissionInEra"); + await handleError( + chaindata, + e, + "getCommissionInEra", + HandlerType.RelayHandler, + ); return null; } }; @@ -48,13 +52,11 @@ export const getBlocked = async ( validator: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return false; - } - const rawPrefs = await chaindata?.api?.query.staking.validators(validator); + const api = await chaindata.handler.getApi(); + const rawPrefs = await api.query.staking.validators(validator); return rawPrefs?.blocked?.toString() === "true"; } catch (e) { - await handleError(chaindata, e, "getBlocked"); + await handleError(chaindata, e, "getBlocked", HandlerType.RelayHandler); return false; } }; @@ -66,17 +68,15 @@ export const isBonded = async ( stash: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return false; - } - const bonded = await chaindata?.api?.query.staking.bonded(stash); + const api = await chaindata.handler.getApi(); + const bonded = await api.query.staking.bonded(stash); if (bonded) { return bonded.isSome; } else { return false; } } catch (e) { - await handleError(chaindata, e, "isBonded"); + await handleError(chaindata, e, "isBonded", HandlerType.RelayHandler); return false; } }; @@ -87,15 +87,13 @@ export const getDenomBondedAmount = async ( stash: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return [0, "API not connected."]; - } - const bondedAddress = await chaindata?.api?.query.staking.bonded(stash); + const api = await chaindata.handler.getApi(); + const bondedAddress = await api.query.staking.bonded(stash); if (!bondedAddress || bondedAddress.isNone) { return [0, "Not bonded to any account."]; } - const ledger: any = await chaindata?.api?.query.staking.ledger( + const ledger: any = await api.query.staking.ledger( bondedAddress.toString(), ); if (!ledger || ledger.isNone) { @@ -110,7 +108,12 @@ export const getDenomBondedAmount = async ( return [0, null]; } } catch (e) { - await handleError(chaindata, e, "getDenomBondedAmount"); + await handleError( + chaindata, + e, + "getDenomBondedAmount", + HandlerType.RelayHandler, + ); return [0, JSON.stringify(e)]; } }; @@ -120,15 +123,13 @@ export const getBondedAmount = async ( stash: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return [0, "API not connected."]; - } - const bondedAddress = await chaindata?.api?.query.staking.bonded(stash); + const api = await chaindata.handler.getApi(); + const bondedAddress = await api.query.staking.bonded(stash); if (!bondedAddress || bondedAddress.isNone) { return [0, "Not bonded to any account."]; } - const ledger: any = await chaindata?.api?.query.staking.ledger( + const ledger: any = await api.query.staking.ledger( bondedAddress.toString(), ); if (!ledger || ledger.isNone) { @@ -147,16 +148,19 @@ export const getControllerFromStash = async ( stash: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const controller = await chaindata?.api?.query.staking.bonded(stash); + const api = await chaindata.handler.getApi(); + const controller = await api.query.staking.bonded(stash); if (!controller) { return null; } return controller.toString(); } catch (e) { - await handleError(chaindata, e, "getControllerFromStash"); + await handleError( + chaindata, + e, + "getControllerFromStash", + HandlerType.RelayHandler, + ); return null; } }; @@ -166,18 +170,20 @@ export const getRewardDestination = async ( stash: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const rewardDestination: any = - await chaindata.api?.query.staking.payee(stash); + const api = await chaindata.handler.getApi(); + const rewardDestination: any = await api.query.staking.payee(stash); if (rewardDestination?.toJSON()?.account) { return rewardDestination?.toJSON()?.account; } else { return rewardDestination?.toString(); } } catch (e) { - await handleError(chaindata, e, "getRewardDestination"); + await handleError( + chaindata, + e, + "getRewardDestination", + HandlerType.RelayHandler, + ); return null; } }; @@ -188,9 +194,6 @@ export const getRewardDestinationAt = async ( stash: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } const rewardDestination: any = await apiAt.query.staking.payee(stash); if (rewardDestination.toJSON().account) { return rewardDestination.toJSON().account; @@ -212,10 +215,8 @@ export const getQueuedKeys = async ( chaindata: ChainData, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } - const queuedKeys = await chaindata.api?.query.session.queuedKeys(); + const api = await chaindata.handler.getApi(); + const queuedKeys = await api.query.session.queuedKeys(); if (!queuedKeys) { return []; } @@ -227,7 +228,7 @@ export const getQueuedKeys = async ( }); return keys; } catch (e) { - await handleError(chaindata, e, "getQueuedKeys"); + await handleError(chaindata, e, "getQueuedKeys", HandlerType.RelayHandler); return []; } }; @@ -249,10 +250,8 @@ export const getNextKeys = async ( stash: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const nextKeysRaw = await chaindata.api?.query.session.nextKeys(stash); + const api = await chaindata.handler.getApi(); + const nextKeysRaw = await api.query.session.nextKeys(stash); if (!nextKeysRaw) { return null; } @@ -267,7 +266,7 @@ export const getNextKeys = async ( } } } catch (e) { - await handleError(chaindata, e, "getNextKeys"); + await handleError(chaindata, e, "getNextKeys", HandlerType.RelayHandler); } return null; }; @@ -281,10 +280,8 @@ export const getBalance = async ( address: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } - const accountData = await chaindata.api?.query.system.account(address); + const api = await chaindata.handler.getApi(); + const accountData = await api.query.system.account(address); if (!accountData) { return null; } @@ -315,14 +312,9 @@ export const getExposure = async ( validator: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } + const api = await chaindata.handler.getApi(); const denom = await chaindata.getDenom(); - const eraStakers = await chaindata.api?.query.staking.erasStakers( - eraIndex, - validator, - ); + const eraStakers = await api.query.staking.erasStakers(eraIndex, validator); if (eraStakers && denom) { const total = parseFloat(eraStakers.total.toString()) / denom; const own = parseFloat(eraStakers.own.toString()) / denom; @@ -346,7 +338,7 @@ export const getExposure = async ( return null; } catch (e) { - await handleError(chaindata, e, "getExposure"); + await handleError(chaindata, e, "getExposure", HandlerType.RelayHandler); return null; } }; @@ -358,9 +350,6 @@ export const getExposureAt = async ( validator: string, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return null; - } const denom = await chaindata.getDenom(); const eraStakers = await apiAt.query.staking.erasStakers( eraIndex, @@ -384,7 +373,7 @@ export const getExposureAt = async ( } return null; } catch (e) { - await handleError(chaindata, e, "getExposureAt"); + await handleError(chaindata, e, "getExposureAt", HandlerType.RelayHandler); return null; } }; diff --git a/packages/common/src/chaindata/queries/Validators.ts b/packages/common/src/chaindata/queries/Validators.ts index 31c46bb1a..a3cb2be69 100644 --- a/packages/common/src/chaindata/queries/Validators.ts +++ b/packages/common/src/chaindata/queries/Validators.ts @@ -1,4 +1,4 @@ -import Chaindata, { handleError } from "../chaindata"; +import Chaindata, { handleError, HandlerType } from "../chaindata"; import logger from "../../logger"; export const getActiveValidatorsInPeriod = async ( @@ -8,9 +8,6 @@ export const getActiveValidatorsInPeriod = async ( chainType: string, ): Promise<[string[] | null, string | null]> => { try { - if (!(await chaindata.checkApiConnection())) { - return [null, null]; - } const allValidators: Set = new Set(); let testEra = startEra; while (testEra <= endEra) { @@ -22,8 +19,8 @@ export const getActiveValidatorsInPeriod = async ( return [null, err]; } - const validators = - await chaindata.api?.query.session.validators.at(blockHash); + const api = await chaindata.handler.getApi(); + const validators = await api.query.session.validators.at(blockHash); if (!validators) { return [null, "Error getting validators"]; } @@ -39,7 +36,12 @@ export const getActiveValidatorsInPeriod = async ( return [Array.from(allValidators), null]; } catch (e) { - await handleError(chaindata, e, "getActiveValidatorsInPeriod"); + await handleError( + chaindata, + e, + "getActiveValidatorsInPeriod", + HandlerType.RelayHandler, + ); return [[], JSON.stringify(e)]; } }; @@ -48,17 +50,19 @@ export const currentValidators = async ( chaindata: Chaindata, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } - - const validators = await chaindata.api?.query.session.validators(); + const api = await chaindata.handler.getApi(); + const validators = await api.query.session.validators(); if (!validators) { return []; } return validators.toJSON() as string[]; } catch (e) { - await handleError(chaindata, e, "currentValidators"); + await handleError( + chaindata, + e, + "currentValidators", + HandlerType.RelayHandler, + ); return []; } }; @@ -67,10 +71,8 @@ export const getValidators = async ( chaindata: Chaindata, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } - const keys = await chaindata.api?.query.staking.validators.keys(); + const api = await chaindata.handler.getApi(); + const keys = await api.query.staking.validators.keys(); if (!keys) { return []; } @@ -78,7 +80,7 @@ export const getValidators = async ( return validators; } catch (e) { - await handleError(chaindata, e, "getValidators"); + await handleError(chaindata, e, "getValidators", HandlerType.RelayHandler); return []; } }; @@ -88,12 +90,14 @@ export const getValidatorsAt = async ( apiAt: any, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } return (await apiAt.query.session.validators()).toJSON(); } catch (e) { - await handleError(chaindata, e, "getValidatorsAt"); + await handleError( + chaindata, + e, + "getValidatorsAt", + HandlerType.RelayHandler, + ); return []; } }; @@ -103,20 +107,23 @@ export const getValidatorsAtEra = async ( era: number, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } const chainType = await chaindata.getChainType(); if (chainType) { const [blockHash, err] = await chaindata.findEraBlockHash(era, chainType); if (blockHash) { - const apiAt = await chaindata.api?.at(blockHash); + const api = await chaindata.handler.getApi(); + const apiAt = await api.at(blockHash); return getValidatorsAt(chaindata, apiAt); } } return []; } catch (e) { - await handleError(chaindata, e, "getValidatorsAtEra"); + await handleError( + chaindata, + e, + "getValidatorsAtEra", + HandlerType.RelayHandler, + ); return []; } }; @@ -125,12 +132,10 @@ export const getAssociatedValidatorAddresses = async ( chaindata: Chaindata, ): Promise => { try { - if (!(await chaindata.checkApiConnection())) { - return []; - } const addresses: string[] = []; - const keys = await chaindata.api?.query.staking.validators.keys(); + const api = await chaindata.handler.getApi(); + const keys = await api.query.staking.validators.keys(); if (!keys) { return []; } @@ -149,7 +154,12 @@ export const getAssociatedValidatorAddresses = async ( return addresses; } catch (e) { - await handleError(chaindata, e, "getAssociatedValidatorAddresses"); + await handleError( + chaindata, + e, + "getAssociatedValidatorAddresses", + HandlerType.RelayHandler, + ); return []; } }; diff --git a/packages/common/src/config.ts b/packages/common/src/config.ts index 015a700e4..b34c2e813 100644 --- a/packages/common/src/config.ts +++ b/packages/common/src/config.ts @@ -24,10 +24,13 @@ export type ConfigSchema = { constraints: { skipConnectionTime: boolean; skipIdentity: boolean; - skipClientUpgrade: boolean; skipUnclaimed: boolean; skipClaiming: boolean; - forceClientVersion: string; + clientUpgrade: { + skip: boolean; + releaseTagFormat?: string; + forcedVersion?: string; + }; minSelfStake: number; commission: number; unclaimedEraThreshold: number; @@ -84,6 +87,7 @@ export type ConfigSchema = { dryRun: boolean; networkPrefix: 0 | 2 | 3; apiEndpoints: string[]; + apiPeopleEndpoints?: string[]; bootstrap: boolean; kusamaBootstrapEndpoint: string; polkadotBootstrapEndpoint: string; @@ -96,11 +100,6 @@ export type ConfigSchema = { room: string; userId: string; }; - redis: { - enable: boolean; - host: string; - port: number; - }; proxy: { timeDelayBlocks: number; blacklistedAnnouncements: string[]; diff --git a/packages/common/src/constants.ts b/packages/common/src/constants.ts index bfbffd995..f26f70c14 100644 --- a/packages/common/src/constants.ts +++ b/packages/common/src/constants.ts @@ -47,10 +47,6 @@ export const BALANCE_BUFFER_AMOUNT = 20; // Timeout threshold for polkadot js api - 360 seconds export const POLKADOT_API_TIMEOUT = 1000000; -export const CHAINDATA_RETRIES = 20; - -export const CHAINDATA_SLEEP = 300; - export const API_PROVIDER_TIMEOUT = 4000; // The number of eras a nominator should wait until making a next nomination @@ -60,12 +56,14 @@ export const NOMINATOR_SHOULD_NOMINATE_ERAS_THRESHOLD = 1; export const KusamaEndpoints = [ "wss://kusama-rpc-tn.dwellir.com", "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws", + "wss://kusama.public.curie.radiumblock.co/ws", "wss://rpc.ibp.network/kusama", "wss://rpc.dotters.network/kusama", "wss://ksm-rpc.stakeworld.io", ]; +export const KusamaPeopleEndpoints = ["wss://kusama-people-rpc.polkadot.io"]; + /// List of Polkadot endpoints we can switch between. export const PolkadotEndpoints = [ "wss://rpc.polkadot.io", @@ -87,6 +85,8 @@ export const defaultWsOptions = { debug: true, }; +export const defaultReleaseTagFormat = "polkadot-v\\d+\\.\\d+\\.\\d+"; // => /polkadot-v\d+\.\d+\.\d+/ + // 2 days in milliseconds export const STALE_TELEMETRY_THRESHOLD = 172800000; diff --git a/packages/common/src/constraints/ValidityChecks.ts b/packages/common/src/constraints/ValidityChecks.ts index 212bec714..a707bb4a2 100644 --- a/packages/common/src/constraints/ValidityChecks.ts +++ b/packages/common/src/constraints/ValidityChecks.ts @@ -16,6 +16,7 @@ import { setUnclaimedInvalidity, setValidateIntentionValidity, setSanctionedGeoAreaValidity, + ReleaseSchema, } from "../db"; import { ChainData, Config, Constants, queries, Util } from "../index"; import axios from "axios"; @@ -64,87 +65,107 @@ export const checkValidateIntention = async ( } }; -// checks that the validator is on the latest client version -export const checkLatestClientVersion = async ( +const _getLatestRelease = async ( config: Config.ConfigSchema, +): Promise => { + if (config.constraints.clientUpgrade.forcedVersion) { + //i.e. useful in case of downgrade necessary + return { + name: config.constraints.clientUpgrade.forcedVersion, + publishedAt: 0, + }; + } + + // Get the latest release from the db or github + let latestRelease = await getLatestRelease(); + if (!latestRelease) { + logger.info( + `No latest release found, fetching from GitHub`, + constraintsLabel, + ); + // fetch from github and set in the db + await getLatestTaggedRelease( + config.constraints.clientUpgrade.releaseTagFormat, + ); + // get the record from the db + latestRelease = await getLatestRelease(); + logger.info( + `Latest release fetched from GitHub: ${latestRelease}`, + constraintsLabel, + ); + } + + return latestRelease; +}; + +const _checkLatestClientVersion = async ( + config: Config.ConfigSchema, + latestRelease: ReleaseSchema, candidate: Candidate, ): Promise => { - try { - const skipClientUpgrade = config.constraints?.skipClientUpgrade || false; - if (skipClientUpgrade || candidate?.implementation === "Kagome Node") { - // Skip the check if the node is a Kagome Client or if skipping client upgrade is enabled - await setLatestClientReleaseValidity(candidate, true); - return true; - } - - // The latest release that is manually set in the config (set if there's reasons for people to downgrade) - const forceLatestRelease = config.constraints.forceClientVersion; + if ( + config.constraints.clientUpgrade.skip || + candidate?.implementation === "Kagome Node" + ) { + // Skip the check if the node is a Kagome Client or if skipping client upgrade is enabled + await setLatestClientReleaseValidity(candidate, true); + return true; + } - // Get the latest release from the db or github - let latestRelease = await getLatestRelease(); - if (!latestRelease) { - logger.info( - `No latest release found, fetching from GitHub`, - constraintsLabel, - ); - // fetch from github and set in the db - await getLatestTaggedRelease(); - // get the record from the db - latestRelease = await getLatestRelease(); - logger.info( - `Latest release fetched from GitHub: ${latestRelease}`, - constraintsLabel, - ); - } + if (!latestRelease || !latestRelease.name || !latestRelease.publishedAt) { + logger.error( + `Latest release isn't properly set, defaulting the validity to true... `, + ); + await setLatestClientReleaseValidity(candidate, true); + return true; + } - // Ensure latestRelease contains a valid name - if (!latestRelease || !latestRelease.name) { - logger.error( - `Latest release name is null or undefined: ${latestRelease}`, - constraintsLabel, - ); - return false; - } + // Check if there is a latest release and if the current time is past the grace window + const isPastGraceWindow = + Date.now() > latestRelease.publishedAt + Constants.FORTY_EIGHT_HOURS; - // Check if there is a latest release and if the current time is past the grace window - const isPastGraceWindow = - Date.now() > latestRelease.publishedAt + Constants.FORTY_EIGHT_HOURS; + if (isPastGraceWindow) { + const nodeVersion = semver.coerce(candidate.version); + const latestVersion = semver.clean(latestRelease.name); - if (isPastGraceWindow) { - const nodeVersion = semver.coerce(candidate.version); - const latestVersion = forceLatestRelease - ? semver.clean(forceLatestRelease) - : semver.clean(latestRelease.name); + logger.info( + `Past grace window of latest release, checking latest client version: ${nodeVersion} >= ${latestVersion}`, + constraintsLabel, + ); - logger.info( - `Past grace window of latest release, checking latest client version: ${nodeVersion} >= ${latestVersion}`, - constraintsLabel, - ); + // If cannot parse the version, set the release as invalid + if (!nodeVersion || !latestVersion) { + await setLatestClientReleaseValidity(candidate, false); + return false; + } - // If cannot parse the version, set the release as invalid - if (!nodeVersion || !latestVersion) { - await setLatestClientReleaseValidity(candidate, false); - return false; - } + const isUpgraded = semver.gte(nodeVersion, latestVersion); - const isUpgraded = semver.gte(nodeVersion, latestVersion); + // If they are not upgraded, set the validity as invalid + if (!isUpgraded) { + await setLatestClientReleaseValidity(candidate, false); + return false; + } - // If they are not upgraded, set the validity as invalid - if (!isUpgraded) { - await setLatestClientReleaseValidity(candidate, false); - return false; - } + // If the current version is the latest release, set the release as valid + await setLatestClientReleaseValidity(candidate, true); + return true; + } else { + logger.info(`Still in grace window of latest release`, constraintsLabel); - // If the current version is the latest release, set the release as valid - await setLatestClientReleaseValidity(candidate, true); - return true; - } else { - logger.info(`Still in grace window of latest release`, constraintsLabel); + await setLatestClientReleaseValidity(candidate, true); + return true; + } +}; - // If not past the grace window, set the release as invalid - await setLatestClientReleaseValidity(candidate, true); - return true; - } +// checks that the validator is on the latest client version +export const checkLatestClientVersion = async ( + config: Config.ConfigSchema, + candidate: Candidate, +): Promise => { + try { + const latestRelease = await _getLatestRelease(config); + return await _checkLatestClientVersion(config, latestRelease, candidate); } catch (e) { logger.error( `Error checking latest client version: ${e}`, @@ -381,7 +402,7 @@ export const checkKusamaRank = async ( } if (Number(res.data.rank) < Constants.KUSAMA_RANK_VALID_THRESHOLD) { - const invalidityReason = `${candidate.name} has a Kusama stash with lower than 25 rank in the Kusama OTV programme: ${res.data.rank}.`; + const invalidityReason = `${candidate.name} has a Kusama stash with lower than 100 rank in the Kusama 1KV programme: ${res.data.rank}.`; await setKusamaRankInvalidity(candidate, false, invalidityReason); return false; } diff --git a/packages/common/src/constraints/constraints.ts b/packages/common/src/constraints/constraints.ts index a321c1fd3..3f2800fff 100644 --- a/packages/common/src/constraints/constraints.ts +++ b/packages/common/src/constraints/constraints.ts @@ -1,5 +1,4 @@ import { ChainData, Config, Constants } from "../index"; -import ApiHandler from "../ApiHandler/ApiHandler"; import { setScoreMetadata } from "./ScoreMetadata"; import { checkAllCandidates, checkCandidate } from "./CheckCandidates"; import { @@ -46,8 +45,8 @@ export class OTV implements Constraints { CLIENT_WEIGHT: Constants.CLIENT_WEIGHT, }; - constructor(handler: ApiHandler, config: Config.ConfigSchema) { - this.chaindata = new ChainData(handler); + constructor(chaindata: ChainData, config: Config.ConfigSchema) { + this.chaindata = chaindata; this.config = config; // Constraints diff --git a/packages/common/src/db/models.ts b/packages/common/src/db/models.ts index dcd03ea5c..2555de3df 100644 --- a/packages/common/src/db/models.ts +++ b/packages/common/src/db/models.ts @@ -943,6 +943,11 @@ export const ValidatorScoreMetadataModel = mongoose.model( ValidatorScoreMetadataSchema, ); +export interface ReleaseSchema { + name: string; + publishedAt: number; +} + export const ReleaseSchema = new Schema({ name: String, publishedAt: Number, diff --git a/packages/common/src/db/queries/Release.ts b/packages/common/src/db/queries/Release.ts index a074f4762..b90fa1fed 100644 --- a/packages/common/src/db/queries/Release.ts +++ b/packages/common/src/db/queries/Release.ts @@ -1,5 +1,5 @@ import logger from "../../logger"; -import { ReleaseModel } from "../models"; +import { ReleaseModel, ReleaseSchema } from "../models"; export const setRelease = async ( name: string, @@ -16,11 +16,11 @@ export const setRelease = async ( return data; }; -export const getLatestRelease = async (): Promise => { +export const getLatestRelease = async (): Promise => { try { const latestRelease = await ReleaseModel.findOne({}) .sort("-publishedAt") - .lean() + .lean() .limit(1); return latestRelease; } catch (error) { diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 030eb8ccc..fb7678ebb 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -13,7 +13,6 @@ import * as Score from "./constraints/score"; import * as Models from "./db/models"; import ScoreKeeper from "./scorekeeper/scorekeeper"; import * as Jobs from "./scorekeeper/jobs/specificJobs"; -import Monitor from "./monitor"; import MatrixBot from "./matrix"; export { @@ -32,5 +31,4 @@ export { ScoreKeeper, Jobs, MatrixBot, - Monitor, }; diff --git a/packages/common/src/monitor.ts b/packages/common/src/monitor.ts deleted file mode 100644 index 84cd13d74..000000000 --- a/packages/common/src/monitor.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { Octokit } from "@octokit/rest"; -import semver from "semver"; - -import { logger, queries } from "./index"; - -type TaggedRelease = { - name: string; - publishedAt: number; -}; - -export default class Monitor { - public grace: number; - public latestTaggedRelease: TaggedRelease | null = null; - - private ghApi: any; - - constructor(grace: number) { - this.grace = grace; - this.ghApi = new Octokit(); - } - - public async getLatestTaggedRelease(): Promise { - logger.info("(Monitor::getLatestTaggedRelease) Fetching latest release"); - let latestRelease; - - try { - latestRelease = await this.ghApi.repos.getLatestRelease({ - owner: "paritytech", - repo: "polkadot-sdk", - }); - } catch (e) { - logger.info(JSON.stringify(e)); - logger.info( - "{Monitor::getLatestTaggedRelease} Could not get latest release.", - ); - } - - if (!latestRelease) return null; - const { tag_name, published_at } = latestRelease.data; - const publishedAt = new Date(published_at).getTime(); - - // Extract version number from the tag name - const versionMatch = tag_name.match(/v?(\d+\.\d+\.\d+)/); - if (!versionMatch) { - logger.warn(`Unable to extract version from tag name: ${tag_name}`); - return null; - } - const version = versionMatch[1]; // Extracted version number - - await queries.setRelease(version, publishedAt); - - if ( - this.latestTaggedRelease && - version === this.latestTaggedRelease!.name - ) { - logger.info("(Monitor::getLatestTaggedRelease) No new release found"); - return null; - } - - this.latestTaggedRelease = { - name: version, - publishedAt, - }; - - logger.info( - `(Monitor::getLatestTaggedRelease) Latest release updated: ${version} | Published at: ${publishedAt}`, - ); - - return this.latestTaggedRelease; - } - - /// Ensures that nodes have upgraded within a `grace` period. - public async ensureUpgrades(): Promise { - // If there is no tagged release stored in state, fetch it now. - if (!this.latestTaggedRelease) { - await this.getLatestTaggedRelease(); - } - - const now = new Date().getTime(); - const nodes = await queries.allCandidates(); - - for (const node of nodes) { - const { name, version, updated } = node; - - const nodeVersion = semver.coerce(version); - const latestVersion = semver.clean( - this.latestTaggedRelease?.name?.split(`-`)[0] || "", - ); - if (latestVersion && nodeVersion) { - logger.debug( - `(Monitor::ensureUpgrades) ${name} | version: ${nodeVersion} latest: ${latestVersion}`, - ); - - if (!nodeVersion) { - if (updated) { - await queries.reportNotUpdated(name); - } - continue; - } - - const isUpgraded = semver.gte(nodeVersion, latestVersion); - - if (isUpgraded) { - if (!updated) { - await queries.reportUpdated(name); - } - continue; - } - - const published = this.latestTaggedRelease?.publishedAt || 0; - if (now < published + this.grace) { - // Still in grace, but check if the node is only one patch version away. - const incremented = semver.inc(nodeVersion, "patch") || ""; - if (semver.gte(incremented, latestVersion)) { - await queries.reportUpdated(name); - continue; - } - } - - await queries.reportNotUpdated(name); - } - } - } -} diff --git a/packages/common/src/nominator/NominatorTx.ts b/packages/common/src/nominator/NominatorTx.ts index 5df229a98..db1c6abc2 100644 --- a/packages/common/src/nominator/NominatorTx.ts +++ b/packages/common/src/nominator/NominatorTx.ts @@ -14,7 +14,6 @@ export const sendProxyDelayTx = async ( nominator: Nominator, targets: string[], chaindata: ChainData, - api: ApiPromise, ): Promise => { try { logger.info( @@ -28,6 +27,9 @@ export const sendProxyDelayTx = async ( stale: false, }); + // TODO: chain interaction should be performed exclusively in ChainData + const api = await chaindata.handler.getApi(); + const innerTx = api?.tx.staking.nominate(targets); const currentBlock = await chaindata.getLatestBlock(); @@ -98,7 +100,6 @@ export const sendProxyTx = async ( nominator: Nominator, targets: string[], chaindata: ChainData, - api: ApiPromise, bot?: MatrixBot, ): Promise => { try { @@ -108,6 +109,9 @@ export const sendProxyTx = async ( nominatorLabel, ); + // TODO: chain interaction should be performed exclusively in ChainData + const api = await chaindata.handler.getApi(); + const innerTx = api?.tx.staking.nominate(targets); const callHash = innerTx.method.hash.toString(); diff --git a/packages/common/src/nominator/__mocks__/nominator.ts b/packages/common/src/nominator/__mocks__/nominator.ts index ed8e876b4..d9589f8c0 100644 --- a/packages/common/src/nominator/__mocks__/nominator.ts +++ b/packages/common/src/nominator/__mocks__/nominator.ts @@ -1,7 +1,7 @@ import Keyring from "@polkadot/keyring"; import { KeyringPair } from "@polkadot/keyring/types"; import ApiHandler from "../../ApiHandler/ApiHandler"; -import { Types } from "../../index"; +import { ChainData, Types } from "../../index"; type Stash = string; // Simplified for example purposes @@ -17,7 +17,7 @@ class NominatorMock { private _bondedAddress: string; private bot: any; - private handler: ApiHandler; + public chaindata: ChainData; private signer: KeyringPair; // Use proxy of controller instead of controller directly. @@ -34,12 +34,12 @@ class NominatorMock { private _nominationNum = 0; constructor( - handler: ApiHandler, + chaindata: ChainData, cfg: Types.NominatorConfig, networkPrefix = 2, bot: any, ) { - this.handler = handler; + this.chaindata = chaindata; this.bot = bot; this._isProxy = cfg.isProxy || false; diff --git a/packages/common/src/nominator/nominator.ts b/packages/common/src/nominator/nominator.ts index 371b0740d..2407154c2 100644 --- a/packages/common/src/nominator/nominator.ts +++ b/packages/common/src/nominator/nominator.ts @@ -2,7 +2,6 @@ import { SubmittableExtrinsic } from "@polkadot/api/types"; import Keyring from "@polkadot/keyring"; import { KeyringPair } from "@polkadot/keyring/types"; -import ApiHandler from "../ApiHandler/ApiHandler"; import { ChainData, Constants, queries, Types } from "../index"; import logger from "../logger"; import EventEmitter from "eventemitter3"; @@ -17,7 +16,6 @@ export default class Nominator extends EventEmitter { private _bondedAddress: string; private bot: any; - private handler: ApiHandler; public chaindata: ChainData; private signer: KeyringPair; @@ -50,15 +48,14 @@ export default class Nominator extends EventEmitter { }; constructor( - handler: ApiHandler, + chaindata: ChainData, cfg: Types.NominatorConfig, networkPrefix = 2, bot?: any, dryRun = false, ) { super(); - this.handler = handler; - this.chaindata = new ChainData(handler); + this.chaindata = chaindata; this.bot = bot; this._isProxy = cfg.isProxy || false; this._dryRun = dryRun || false; @@ -200,8 +197,9 @@ export default class Nominator extends EventEmitter { public async stash(): Promise { try { - const api = this.handler.getApi(); - const ledger = await api?.query.staking.ledger(this.bondedAddress); + // TODO: chain interaction should be performed exclusively in ChainData + const api = await this.chaindata.handler.getApi(); + const ledger = await api.query.staking.ledger(this.bondedAddress); if (ledger !== undefined && !ledger.isSome) { logger.warn(`Account ${this.bondedAddress} is not bonded!`); @@ -226,11 +224,6 @@ export default class Nominator extends EventEmitter { } public async payee(): Promise { - const api = this.handler.getApi(); - if (!api) { - logger.error(`Error getting API in payee`, nominatorLabel); - return ""; - } try { const stash = await this.stash(); const isBonded = await this.chaindata.isBonded(stash); @@ -294,14 +287,6 @@ export default class Nominator extends EventEmitter { public async nominate(targets: Types.Stash[]): Promise { try { - const now = new Date().getTime(); - - const api = this.handler.getApi(); - if (!api) { - logger.error(`Error getting API in nominate`, nominatorLabel); - return false; - } - const currentEra = (await this.chaindata.getCurrentEra()) || 0; const nominatorStatus: NominatorStatus = { state: NominatorState.Nominating, @@ -350,20 +335,22 @@ export default class Nominator extends EventEmitter { `Starting a delayed proxy tx for ${this.bondedAddress}`, nominatorLabel, ); - await sendProxyDelayTx(this, targets, this.chaindata, api); + await sendProxyDelayTx(this, targets, this.chaindata); } else if (this._isProxy && this._proxyDelay == 0) { logger.info( `Starting a non delayed proxy tx for ${this.bondedAddress}`, nominatorLabel, ); // Start a non delay proxy tx - await sendProxyTx(this, targets, this.chaindata, api, this.bot); + await sendProxyTx(this, targets, this.chaindata, this.bot); } else { logger.info( `Starting a non proxy tx for ${this.bondedAddress}`, nominatorLabel, ); // Do a non-proxy tx + // TODO: chain interaction should be performed exclusively in ChainData + const api = await this.chaindata.handler.getApi(); tx = api.tx.staking.nominate(targets); await this.sendStakingTx(tx, targets); } @@ -380,11 +367,8 @@ export default class Nominator extends EventEmitter { callHash: string; height: number; }): Promise { - const api = this.handler.getApi(); - if (!api) { - logger.error(`Error getting API in cancelTx`, nominatorLabel); - return false; - } + // TODO: chain interaction should be performed exclusively in ChainData + const api = await this.chaindata.handler.getApi(); const tx = api.tx.proxy.removeAnnouncement( announcement.real, announcement.callHash, @@ -457,11 +441,6 @@ export default class Nominator extends EventEmitter { return [false, "dryRun"]; } const now = new Date().getTime(); - const api = this.handler.getApi(); - if (!api) { - logger.error(`Error getting API in sendStakingTx`, nominatorLabel); - return [false, "error getting api to send staking tx"]; - } let didSend = true; let finalizedBlockHash: string | undefined; @@ -499,6 +478,8 @@ export default class Nominator extends EventEmitter { `{Nominator::nominate} tx is finalized in block ${finalizedBlockHash}`, ); + // TODO: chain interaction should be performed exclusively in ChainData + const api = await this.chaindata.handler.getApi(); for (const event of events) { if ( event.event && diff --git a/packages/common/src/scorekeeper/Nominating.ts b/packages/common/src/scorekeeper/Nominating.ts index 88e1776c5..d5bc467f8 100644 --- a/packages/common/src/scorekeeper/Nominating.ts +++ b/packages/common/src/scorekeeper/Nominating.ts @@ -7,7 +7,6 @@ import { autoNumNominations } from "./NumNominations"; import { scorekeeperLabel } from "./scorekeeper"; import logger from "../logger"; import { ChainData, queries, Util } from "../index"; -import ApiHandler from "../ApiHandler/ApiHandler"; import MatrixBot from "../matrix"; import { ConfigSchema } from "../config"; import Nominator from "../nominator/nominator"; @@ -18,7 +17,6 @@ export const doNominations = async ( candidates: { name: string; stash: string; total: number }[], nominatorGroups: Nominator[], chaindata: ChainData, - handler: ApiHandler, bot: MatrixBot, config: ConfigSchema, currentTargets: { name?: string; stash?: string; identity?: any }[], @@ -70,10 +68,9 @@ export const doNominations = async ( // The number of nominations to do per nominator account // This is either hard coded, or set to "auto", meaning it will find a dynamic amount of validators // to nominate based on the lowest staked validator in the validator set - const api = handler.getApi(); const denom = await chaindata.getDenom(); - if (!api || !denom) return null; - const autoNom = await autoNumNominations(api, nominator); + if (!denom) return null; + const autoNom = await autoNumNominations(nominator); const { nominationNum } = autoNom; logger.info( diff --git a/packages/common/src/scorekeeper/NumNominations.ts b/packages/common/src/scorekeeper/NumNominations.ts index 193ad009f..54145f4eb 100644 --- a/packages/common/src/scorekeeper/NumNominations.ts +++ b/packages/common/src/scorekeeper/NumNominations.ts @@ -19,7 +19,6 @@ import { NominatorState, NominatorStatus } from "../types"; * buffer percentage and additional nominations desired. This function is chain-aware and adjusts its logic and limits * based on whether it's operating on Polkadot or another chain. * - * @param {ApiPromise} api - An instance of the ApiPromise from Polkadot.js API, connected to the target chain. * @param {Nominator} nominator - An object representing the nominator, including methods to get the stash account and nominate validators. * @returns {Promise} A promise that resolves to an object containing: * - `nominationNum`: The number of validators the nominator should nominate. @@ -33,7 +32,6 @@ import { NominatorState, NominatorStatus } from "../types"; * console.log(`Nominator can nominate ${nominationInfo.nominationNum} validators.`); */ export const autoNumNominations = async ( - api: ApiPromise, nominator: Nominator, ): Promise => { const nominatorStatus: NominatorStatus = { @@ -44,11 +42,13 @@ export const autoNumNominations = async ( }; await nominator.updateNominatorStatus(nominatorStatus); - const denom = (await nominator?.chaindata?.getDenom()) || 0; + const denom = (await nominator.chaindata.getDenom()) || 0; // Get the full nominator stash balance (free + reserved) const stash = await nominator.stash(); if (!stash) return 0; + // TODO: chain interaction should be performed exclusively in ChainData + const api = await nominator.chaindata.handler.getApi(); const stashQuery = await api.query.system.account(stash); const stashBal = diff --git a/packages/common/src/scorekeeper/RegisterHandler.ts b/packages/common/src/scorekeeper/RegisterHandler.ts index 4616bff49..85ae61538 100644 --- a/packages/common/src/scorekeeper/RegisterHandler.ts +++ b/packages/common/src/scorekeeper/RegisterHandler.ts @@ -3,51 +3,42 @@ * * @function RegisterHandler */ -import { - ApiHandler, - ChainData, - Config, - logger, - queries, - ScoreKeeper, -} from "../index"; +import { ChainData, logger, queries, ScoreKeeper } from "../index"; import { scorekeeperLabel } from "./scorekeeper"; import { jobStatusEmitter } from "../Events"; import { Job, JobStatus } from "./jobs/JobsClass"; -export const registerAPIHandler = ( - handler: ApiHandler, - config: Config.ConfigSchema, - chaindata: ChainData, - bot: any, -): void => { +export const registerAPIHandler = (chaindata: ChainData, bot: any): void => { // Handles offline event. Validators will be faulted for each session they are offline // If they have already reaceived an offline fault for that session, it is skipped - handler.on("someOffline", async (data: { offlineVals: string[] }) => { - const { offlineVals } = data; - const session = (await chaindata.getSession()) || 0; - for (const val of offlineVals) { - const candidate = await queries.getCandidateByStash(val); - if (!candidate) return; - const reason = `${candidate.name} had an offline event in session ${ - session - 1 - }`; - let alreadyFaulted = false; - for (const fault of candidate.faultEvents) { - if (fault.reason === reason) { - alreadyFaulted = true; + chaindata.handler.on( + "someOffline", + async (data: { offlineVals: string[] }) => { + const { offlineVals } = data; + const session = (await chaindata.getSession()) || 0; + for (const val of offlineVals) { + const candidate = await queries.getCandidateByStash(val); + if (!candidate) return; + const reason = `${candidate.name} had an offline event in session ${ + session - 1 + }`; + let alreadyFaulted = false; + for (const fault of candidate.faultEvents) { + if (fault.reason === reason) { + alreadyFaulted = true; + } } - } - if (alreadyFaulted) continue; + if (alreadyFaulted) continue; - logger.info(`Some offline: ${reason}`, scorekeeperLabel); - await bot?.sendMessage(reason); + logger.info(`Some offline: ${reason}`, scorekeeperLabel); + await bot?.sendMessage(reason); - await queries.pushFaultEvent(candidate.stash, reason); - } - }); + await queries.pushFaultEvent(candidate.stash, reason); + } + }, + ); - handler.on("newSession", async (data: { sessionIndex: string }) => { + chaindata.handler.on("newSession", async (data: { sessionIndex: string }) => { const { sessionIndex } = data; logger.info(`New Session Event: ${sessionIndex}`, scorekeeperLabel); }); diff --git a/packages/common/src/scorekeeper/Round.ts b/packages/common/src/scorekeeper/Round.ts index 6238d7342..763485704 100644 --- a/packages/common/src/scorekeeper/Round.ts +++ b/packages/common/src/scorekeeper/Round.ts @@ -10,7 +10,6 @@ import { doNominations } from "./Nominating"; import { OTV } from "../constraints/constraints"; import { ConfigSchema } from "../config"; import MatrixBot from "../matrix"; -import ApiHandler from "../ApiHandler/ApiHandler"; import Nominator from "../nominator/nominator"; import { jobStatusEmitter } from "../Events"; import { JobNames } from "./jobs/JobConfigs"; @@ -27,7 +26,6 @@ export const startRound = async ( constraints: OTV, nominatorGroups: Nominator[], chaindata: ChainData, - handler: ApiHandler, config: ConfigSchema, currentTargets: { stash?: string; identity?: any }[], ): Promise<{ stash?: string; identity?: any }[] | null> => { @@ -150,7 +148,6 @@ export const startRound = async ( sortedCandidates, nominatorGroups, chaindata, - handler, bot, config, currentTargets, diff --git a/packages/common/src/scorekeeper/jobs/JobConfigs.ts b/packages/common/src/scorekeeper/jobs/JobConfigs.ts index 994fb0eab..0d31a445b 100644 --- a/packages/common/src/scorekeeper/jobs/JobConfigs.ts +++ b/packages/common/src/scorekeeper/jobs/JobConfigs.ts @@ -63,7 +63,9 @@ export const getJobConfigs = ( jobKey: "monitor", defaultFrequency: Constants.MONITOR_CRON, jobFunction: async () => { - await getLatestTaggedRelease(); + await getLatestTaggedRelease( + jobRunnerMetadata.config.constraints.clientUpgrade.releaseTagFormat, + ); }, name: JobNames.Monitor, preventOverlap: true, diff --git a/packages/common/src/scorekeeper/jobs/JobsClass.ts b/packages/common/src/scorekeeper/jobs/JobsClass.ts index 0ad2a90d9..b3b944fa0 100644 --- a/packages/common/src/scorekeeper/jobs/JobsClass.ts +++ b/packages/common/src/scorekeeper/jobs/JobsClass.ts @@ -1,4 +1,4 @@ -import { ApiHandler, ChainData, Config, Constraints } from "../../index"; +import { ChainData, Config, Constraints } from "../../index"; import MatrixBot from "../../matrix"; import Nominator from "../../nominator/nominator"; import { ConfigSchema } from "../../config"; @@ -16,7 +16,6 @@ export type JobRunnerMetadata = { // currentEra: number; bot: MatrixBot; constraints: Constraints.OTV; - handler: ApiHandler; currentTargets: { stash?: string; identity?: any }[]; }; diff --git a/packages/common/src/scorekeeper/jobs/JobsRunnerFactory.ts b/packages/common/src/scorekeeper/jobs/JobsRunnerFactory.ts index 52912d8af..508e99134 100644 --- a/packages/common/src/scorekeeper/jobs/JobsRunnerFactory.ts +++ b/packages/common/src/scorekeeper/jobs/JobsRunnerFactory.ts @@ -1,4 +1,3 @@ -import { MicroserviceJobRunner } from "./MicroserviceJobRunner"; import { MonolithJobRunner } from "./MonolithJobRunner"; import { JobsRunner } from "./JobRunner"; import { JobRunnerMetadata } from "./JobsClass"; @@ -7,8 +6,6 @@ export class JobsRunnerFactory { static makeJobs = async ( metadata: JobRunnerMetadata, ): Promise => { - if (!metadata.config?.redis?.host && metadata.config?.redis?.port) - return new MicroserviceJobRunner(metadata); - else return new MonolithJobRunner(metadata); + return new MonolithJobRunner(metadata); }; } diff --git a/packages/common/src/scorekeeper/jobs/MicroserviceJobRunner.ts b/packages/common/src/scorekeeper/jobs/MicroserviceJobRunner.ts deleted file mode 100644 index 72502b537..000000000 --- a/packages/common/src/scorekeeper/jobs/MicroserviceJobRunner.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { logger } from "../..//index"; - -// import { otvWorker } from "@1kv/worker"; -import { scorekeeperLabel } from "../scorekeeper"; -import { JobsRunner } from "./JobRunner"; -import { Job } from "./JobsClass"; - -export class MicroserviceJobRunner extends JobsRunner { - _startSpecificJobs = async (): Promise => { - const { config, chaindata } = this.metadata; - if (!config?.redis?.host || !config?.redis?.port) { - logger.error( - `No redis config found. Microservice Jobs will not be started.`, - scorekeeperLabel, - ); - return []; - } - try { - // Jobs get run in separate worker - logger.info(`Starting bullmq Queues and Workers....`, scorekeeperLabel); - // const releaseMonitorQueue = - // await otvWorker.queues.createReleaseMonitorQueue( - // config.redis.host, - // config.redis.port, - // ); - // const constraintsQueue = await otvWorker.queues.createConstraintsQueue( - // config.redis.host, - // config.redis.port, - // ); - // const chaindataQueue = await otvWorker.queues.createChainDataQueue( - // config.redis.host, - // config.redis.port, - // ); - // const blockQueue = await otvWorker.queues.createBlockQueue( - // config.redis.host, - // config.redis.port, - // ); - // - // const removeRepeatableJobs = true; - // if (removeRepeatableJobs) { - // logger.info(`remove jobs: ${removeRepeatableJobs}`, scorekeeperLabel); - // // Remove any previous repeatable jobs - // await otvWorker.queues.removeRepeatableJobsFromQueues([ - // releaseMonitorQueue, - // constraintsQueue, - // chaindataQueue, - // blockQueue, - // ]); - // } - // - // const obliterateQueues = false; - // if (obliterateQueues) { - // await otvWorker.queues.obliterateQueues([ - // releaseMonitorQueue, - // constraintsQueue, - // chaindataQueue, - // blockQueue, - // ]); - // } - // - // // Add repeatable jobs to the queues - // // Queues need to have different repeat time intervals - // await otvWorker.queues.addReleaseMonitorJob(releaseMonitorQueue, 60000); - // await otvWorker.queues.addValidityJob(constraintsQueue, 1000001); - // await otvWorker.queues.addScoreJob(constraintsQueue, 100002); - // await otvWorker.queues.addActiveValidatorJob(chaindataQueue, 100003); - // await otvWorker.queues.addEraPointsJob(chaindataQueue, 100006); - // await otvWorker.queues.addEraStatsJob(chaindataQueue, 110008); - // await otvWorker.queues.addInclusionJob(chaindataQueue, 100008); - // await otvWorker.queues.addNominatorJob(chaindataQueue, 100009); - // await otvWorker.queues.addSessionKeyJob(chaindataQueue, 100010); - // await otvWorker.queues.addValidatorPrefJob(chaindataQueue, 100101); - // await otvWorker.queues.addAllBlocks(blockQueue, chaindata); - // TODO update this as queue job - // await startLocationStatsJob(this.config, this.chaindata); - return []; - } catch (e) { - logger.error(JSON.stringify(e), scorekeeperLabel); - logger.error("Error starting microservice jobs", scorekeeperLabel); - return []; - } - }; -} diff --git a/packages/common/src/scorekeeper/jobs/specificJobs/ExecutionJob.ts b/packages/common/src/scorekeeper/jobs/specificJobs/ExecutionJob.ts index 6769e928d..b4fa046d0 100644 --- a/packages/common/src/scorekeeper/jobs/specificJobs/ExecutionJob.ts +++ b/packages/common/src/scorekeeper/jobs/specificJobs/ExecutionJob.ts @@ -16,7 +16,7 @@ export const executionJob = async ( metadata: JobRunnerMetadata, ): Promise => { try { - const { config, chaindata, nominatorGroups, bot, handler } = metadata; + const { config, chaindata, nominatorGroups, bot } = metadata; const isDryRun = config?.scorekeeper?.dryRun; @@ -30,12 +30,6 @@ export const executionJob = async ( logger.error(`latest block is null`, cronLabel); return false; } - const api = handler.getApi(); - - if (!api) { - logger.error(`api is null`, cronLabel); - return false; - } const era = await chaindata.getCurrentEra(); if (!era) { @@ -149,6 +143,8 @@ export const executionJob = async ( // time to execute + // TODO: chain interaction should be performed exclusively in ChainData + const api = await chaindata.handler.getApi(); const innerTx = api.tx.staking.nominate(targets); const tx = api.tx.proxy.proxyAnnounced( nominator.address, diff --git a/packages/common/src/scorekeeper/jobs/specificJobs/MainScorekeeperJob.ts b/packages/common/src/scorekeeper/jobs/specificJobs/MainScorekeeperJob.ts index 67be1a52d..ea3e615ba 100644 --- a/packages/common/src/scorekeeper/jobs/specificJobs/MainScorekeeperJob.ts +++ b/packages/common/src/scorekeeper/jobs/specificJobs/MainScorekeeperJob.ts @@ -17,15 +17,8 @@ const mainScoreKeeperLabel = { label: "MainScorekeeperJob" }; export const mainScorekeeperJob = async ( metadata: JobRunnerMetadata, ): Promise => { - const { - constraints, - config, - chaindata, - nominatorGroups, - nominating, - bot, - handler, - } = metadata; + const { constraints, config, chaindata, nominatorGroups, nominating, bot } = + metadata; logger.info(`Running Main Scorekeeper`, mainScoreKeeperLabel); const [activeEra, err] = await chaindata.getActiveEraIndex(); @@ -118,7 +111,6 @@ export const mainScorekeeperJob = async ( constraints, hasOld, chaindata, - handler, config, allCurrentTargets, ); diff --git a/packages/common/src/scorekeeper/jobs/specificJobs/ReleaseMonitorJob.ts b/packages/common/src/scorekeeper/jobs/specificJobs/ReleaseMonitorJob.ts index 9167c7f42..8cdf1e0fa 100644 --- a/packages/common/src/scorekeeper/jobs/specificJobs/ReleaseMonitorJob.ts +++ b/packages/common/src/scorekeeper/jobs/specificJobs/ReleaseMonitorJob.ts @@ -3,6 +3,7 @@ import { Octokit } from "@octokit/rest"; import { Job, JobConfig, JobRunnerMetadata, JobStatus } from "../JobsClass"; import { JobNames } from "../JobConfigs"; import { jobStatusEmitter } from "../../../Events"; +import { defaultReleaseTagFormat } from "../../../constants"; export const monitorLabel = { label: "Monitor" }; @@ -12,7 +13,7 @@ export class MonitorJob extends Job { } } -export const getLatestTaggedRelease = async () => { +export const getLatestTaggedRelease = async (releaseTagFormat: string) => { try { const start = Date.now(); @@ -22,11 +23,19 @@ export const getLatestTaggedRelease = async () => { const ghApi = new Octokit(); try { - const release = await ghApi.repos.getLatestRelease({ + const list = await ghApi.repos.listReleases({ owner: "paritytech", repo: "polkadot-sdk", }); - latestRelease = release?.data; + const filtered = list.data.filter((item) => { + // eslint-disable-next-line security/detect-non-literal-regexp + const regex = new RegExp( + releaseTagFormat ? releaseTagFormat : defaultReleaseTagFormat, + ); + return regex.test(item.tag_name); + }); + + latestRelease = filtered[0]; } catch { logger.warn("Could not get latest release.", monitorLabel); } @@ -78,6 +87,6 @@ export const getLatestTaggedRelease = async () => { }; // Called by worker to process Job -export const processReleaseMonitorJob = async (job: any) => { - await getLatestTaggedRelease(); -}; +// export const processReleaseMonitorJob = async (job: any) => { +// await getLatestTaggedRelease(); +// }; diff --git a/packages/common/src/scorekeeper/jobs/specificJobs/StaleNomination.ts b/packages/common/src/scorekeeper/jobs/specificJobs/StaleNomination.ts index 85f2651a5..2cb3d36a0 100644 --- a/packages/common/src/scorekeeper/jobs/specificJobs/StaleNomination.ts +++ b/packages/common/src/scorekeeper/jobs/specificJobs/StaleNomination.ts @@ -12,14 +12,7 @@ export const staleNominationJob = async ( metadata: JobRunnerMetadata, ): Promise => { try { - const { config, chaindata, nominatorGroups, bot, handler } = metadata; - - const api = handler.getApi(); - - if (!api) { - logger.error(`api is null`, cronLabel); - return false; - } + const { config, chaindata, nominatorGroups, bot } = metadata; // threshold for a stale nomination - 8 eras for kusama, 2 eras for polkadot const threshold = config.global.networkPrefix == 2 ? 8 : 2; diff --git a/packages/common/src/scorekeeper/scorekeeper.ts b/packages/common/src/scorekeeper/scorekeeper.ts index e0f7eeb6f..743dbc022 100644 --- a/packages/common/src/scorekeeper/scorekeeper.ts +++ b/packages/common/src/scorekeeper/scorekeeper.ts @@ -29,7 +29,6 @@ export const scorekeeperLabel = { label: "Scorekeeper" }; // Scorekeeper is the main orchestrator of initiating jobs and kickstarting the workflow of nominations export default class ScoreKeeper { - public handler: ApiHandler; public bot: any; public chaindata: ChainData; public config: Config.ConfigSchema; @@ -52,17 +51,16 @@ export default class ScoreKeeper { public isStarted = false; - constructor(handler: ApiHandler, config: Config.ConfigSchema, bot: any) { - this.handler = handler; - this.chaindata = new ChainData(this.handler); + constructor(chaindata: ChainData, config: Config.ConfigSchema, bot?: any) { + this.chaindata = chaindata; this.config = config; this.bot = bot || null; - this.constraints = new Constraints.OTV(this.handler, this.config); + this.constraints = new Constraints.OTV(chaindata, this.config); this.nominatorGroups = []; this._dryRun = this.config.scorekeeper.dryRun; this.upSince = Date.now(); - registerAPIHandler(this.handler, this.config, this.chaindata, this.bot); + registerAPIHandler(this.chaindata, this.bot); registerEventEmitterHandler(this); } public getJobsStatusAsJson() { @@ -105,7 +103,7 @@ export default class ScoreKeeper { networkPrefix = 2, ): Promise { const nominator = new Nominator( - this.handler, + this.chaindata, cfg, networkPrefix, this.bot, @@ -124,14 +122,9 @@ export default class ScoreKeeper { const nom = await this._spawn(nomCfg, this.config.global.networkPrefix); // try and get the ledger for the nominator - this means it is bonded. If not then don't add it. - const api = this.handler.getApi(); - if (!api) { - logger.error( - `Error getting API in addNominatorGroup`, - scorekeeperLabel, - ); - return false; - } + + // TODO: chain interaction should be performed exclusively in ChainData + const api = await this.chaindata.handler.getApi(); const ledger = await api.query.staking.ledger(nom.bondedAddress); if (!ledger) { logger.warn( @@ -275,7 +268,6 @@ export default class ScoreKeeper { this.constraints, filteredNominators, this.chaindata, - this.handler, this.config, this.currentTargets, ); @@ -290,7 +282,6 @@ export default class ScoreKeeper { // currentEra: this.currentEra, bot: this.bot, constraints: this.constraints, - handler: this.handler, currentTargets: this.currentTargets, }; diff --git a/packages/common/src/types.ts b/packages/common/src/types.ts index 69d5045bb..a97eafe6b 100644 --- a/packages/common/src/types.ts +++ b/packages/common/src/types.ts @@ -1,3 +1,5 @@ +import ApiHandler from "./ApiHandler/ApiHandler"; + export type Address = string; export type Stash = string; @@ -13,6 +15,11 @@ export type EraReward = { era: number; }; +export type ApiHandlers = { + relay: ApiHandler; + people: ApiHandler; +}; + export type BooleanResult = [boolean, string | null]; export type NumberResult = [number, string | null]; export type StringResult = [string, string | null]; diff --git a/packages/common/test/ApiHandler/ApiHandler.int.test.ts b/packages/common/test/ApiHandler/ApiHandler.int.test.ts index 038f33fce..e3af62b7e 100644 --- a/packages/common/test/ApiHandler/ApiHandler.int.test.ts +++ b/packages/common/test/ApiHandler/ApiHandler.int.test.ts @@ -1,21 +1,20 @@ import { beforeAll, describe, expect, it } from "vitest"; -import { getKusamaHandler } from "../testUtils/apiHandler"; import { ApiHandler } from "../../src"; +import { KusamaEndpoints } from "../../src/constants"; const TIMEOUT_DURATION = 5200000; // 120 seconds describe("ApiHandler Integration Tests", () => { let handler: ApiHandler; beforeAll(async () => { - handler = await getKusamaHandler(); + handler = new ApiHandler(KusamaEndpoints); }, TIMEOUT_DURATION); it( - "should check API connection", + "return functional api with getApi()", async () => { - console.log("waiting...."); - const healthy = await handler.healthCheck(); - expect(healthy).toBe(true); + const api = await handler.getApi(); + expect(api.isConnected).toBe(true); }, TIMEOUT_DURATION, ); diff --git a/packages/common/test/chaindata/chaindata.int.test.ts b/packages/common/test/chaindata/chaindata.int.test.ts index d0524d86f..6c3ac12e1 100644 --- a/packages/common/test/chaindata/chaindata.int.test.ts +++ b/packages/common/test/chaindata/chaindata.int.test.ts @@ -2,26 +2,21 @@ import ApiHandler from "../../src/ApiHandler/ApiHandler"; import { ChainData } from "../../src/chaindata/chaindata"; import { Block } from "@polkadot/types/interfaces"; import { beforeAll, describe, expect, it } from "vitest"; -import { getKusamaHandler } from "../testUtils/apiHandler"; +import { ApiHandlers } from "../../src/types"; +import { KusamaEndpoints, KusamaPeopleEndpoints } from "../../src/constants"; -const TIMEOUT_DURATION = 1200000; // 120 seconds +const TIMEOUT_DURATION = 120_000; // 120 seconds describe("ChainData Integration Tests", () => { - let apiHandler: ApiHandler; let chainData: ChainData; beforeAll(async () => { - apiHandler = await getKusamaHandler(); - chainData = new ChainData(apiHandler); + const apiHandlers: ApiHandlers = { + relay: new ApiHandler(KusamaEndpoints), + people: new ApiHandler(KusamaPeopleEndpoints), + }; + chainData = new ChainData(apiHandlers); }, TIMEOUT_DURATION); - it( - "should check API connection", - async () => { - await chainData.checkApiConnection(); - }, - TIMEOUT_DURATION, - ); - it( "should fetch chain type", async () => { diff --git a/packages/common/test/monitor.unit.test.ts b/packages/common/test/monitor.unit.test.ts deleted file mode 100644 index ebbe9aba5..000000000 --- a/packages/common/test/monitor.unit.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Monitor from "../src/monitor"; -import { describe, expect, it } from "vitest"; - -describe("Monitor", () => { - it("should retrieve the latest tagged release", async () => { - const monitor = new Monitor(10); - const latest = await monitor.getLatestTaggedRelease(); - expect(latest).toBeDefined(); - }, 10000); -}); diff --git a/packages/common/test/nominator/nominator.int.test.ts b/packages/common/test/nominator/nominator.int.test.ts index 8346a4127..26dafd4d0 100644 --- a/packages/common/test/nominator/nominator.int.test.ts +++ b/packages/common/test/nominator/nominator.int.test.ts @@ -1,11 +1,14 @@ import Nominator from "../../src/nominator/nominator"; import ApiHandler from "../../src/ApiHandler/ApiHandler"; import { NominatorConfig } from "../../src/types"; -import { beforeEach, describe, expect, it } from "vitest"; +import { beforeAll, describe, expect, it } from "vitest"; +import { KusamaEndpoints, KusamaPeopleEndpoints } from "../../src/constants"; +import { ChainData } from "../../src"; +import { getKusamaChainData } from "../testUtils/chaindata"; describe("Nominator Integration Test", () => { const nominators: Nominator[] = []; - let handler: ApiHandler; + let chaindata: ChainData; const nom1 = { stash: "G1rrUNQSk7CjjEmLSGcpNu72tVtyzbWdUvgmSer9eBitXWf", @@ -177,14 +180,13 @@ describe("Nominator Integration Test", () => { }, ]; - beforeEach(async () => { - handler = new ApiHandler(["wss://kusama-rpc.polkadot.io"]); - await handler.setAPI(); + beforeAll(async () => { + chaindata = await getKusamaChainData(); }); it("should have a status defined", async () => { for (const config of nominatorConfigs) { - nominators.push(new Nominator(handler, config, 2, null)); + nominators.push(new Nominator(chaindata, config, 2, null)); } for (const nominator of nominators) { diff --git a/packages/common/test/nominator/nominator.unit.test.ts b/packages/common/test/nominator/nominator.unit.test.ts index 631737a3c..4101c5591 100644 --- a/packages/common/test/nominator/nominator.unit.test.ts +++ b/packages/common/test/nominator/nominator.unit.test.ts @@ -15,7 +15,7 @@ describe("Nominator Mock Class Unit Tests", () => { const signerAddress = "DvDsrjvaJpXNW7XLvtFtEB3D9nnBKMqzvrijFffwpe7CCc6"; beforeAll(async () => { handler = new ApiHandler(["Constants.KusamaEndpoints"]); - await handler.setAPI(); + await handler.getApi(); nominatorConfig = { isProxy: false, diff --git a/packages/common/test/scorekeeper/NumNominations.int.test.ts b/packages/common/test/scorekeeper/NumNominations.int.test.ts index 19f44052c..1bbbd8ffb 100644 --- a/packages/common/test/scorekeeper/NumNominations.int.test.ts +++ b/packages/common/test/scorekeeper/NumNominations.int.test.ts @@ -1,15 +1,11 @@ import { autoNumNominations } from "../../src/scorekeeper/NumNominations"; -import { KusamaEndpoints } from "../../src/constants"; import Nominator from "../../src/nominator/nominator"; -import ApiHandler from "../../src/ApiHandler/ApiHandler"; import { describe, expect, it } from "vitest"; +import { getKusamaChainData } from "../testUtils/chaindata"; describe("autoNumNominations Integration Test", () => { it("queries the real API and retrieves data", async () => { - const handler = new ApiHandler(KusamaEndpoints); - await handler.setAPI(); - await new Promise((resolve) => setTimeout(resolve, 5000)); - const api = handler.getApi(); + const chaindata = await getKusamaChainData(); const nominatorConfig = { isProxy: false, @@ -18,12 +14,10 @@ describe("autoNumNominations Integration Test", () => { proxyFor: "EX9uchmfeSqKTM7cMMg8DkH49XV8i4R7a7rqCn8btpZBHDP", }; - const nominator = new Nominator(handler, nominatorConfig, 2, null); + const nominator = new Nominator(chaindata, nominatorConfig, 2, null); - const result = await autoNumNominations(api, nominator); + const result = await autoNumNominations(nominator); expect(result).toBeDefined(); - - await api.disconnect(); }, 160000); }); diff --git a/packages/common/test/scorekeeper/NumNominations.unit.test.ts b/packages/common/test/scorekeeper/NumNominations.unit.test.ts index 981689b02..9acca94e1 100644 --- a/packages/common/test/scorekeeper/NumNominations.unit.test.ts +++ b/packages/common/test/scorekeeper/NumNominations.unit.test.ts @@ -1,8 +1,9 @@ -import { ApiPromise } from "@polkadot/api"; import Nominator from "../../src/nominator/nominator"; +import ChainData from "../../src/chaindata/chaindata"; import { ApiHandler } from "../../src"; import { autoNumNominations } from "../../src/scorekeeper/NumNominations"; import { beforeEach, describe, expect, it, Mock, vi } from "vitest"; +import { KusamaEndpoints, KusamaPeopleEndpoints } from "../../src/constants"; vi.mock("@polkadot/api", () => ({ ApiPromise: { @@ -20,12 +21,11 @@ const mockCompact = (value: bigint) => ({ }); describe("autoNumNominations", () => { - let api: ApiPromise; + let chaindata: ChainData; let nominator: Nominator; - let handler: ApiHandler; beforeEach(async () => { - (ApiPromise.create as Mock).mockResolvedValue({ + vi.spyOn(ApiHandler.prototype, "getApi").mockResolvedValue({ rpc: { system: { chain: vi.fn().mockResolvedValue("Polkadot"), @@ -63,12 +63,25 @@ describe("autoNumNominations", () => { }), }, }, + registry: { + getChainProperties: vi.fn().mockResolvedValue({ + tokenDecimals: { + toJSON: vi.fn().mockImplementation(() => [10]), + }, + }), + }, + }); + + const relayApiHandler = new ApiHandler(KusamaEndpoints); + const peopleApiHandler = new ApiHandler(KusamaPeopleEndpoints); + + chaindata = new ChainData({ + relay: relayApiHandler, + people: peopleApiHandler, }); - api = await ApiPromise.create(); - handler = new ApiHandler(["wss://kusama-rpc.polkadot.io"]); nominator = new Nominator( - handler, + chaindata, { seed: "word word word word word word word word word word word word", isProxy: false, @@ -81,7 +94,7 @@ describe("autoNumNominations", () => { it("should calculate the number of nominations correctly", async () => { nominator.stash = vi.fn().mockResolvedValue("stashAddress"); - const result = await autoNumNominations(api, nominator); + const result = await autoNumNominations(nominator); expect(result.nominationNum).toBeGreaterThan(0); }); diff --git a/packages/common/test/testUtils/apiHandler.ts b/packages/common/test/testUtils/apiHandler.ts deleted file mode 100644 index fdb3bae3d..000000000 --- a/packages/common/test/testUtils/apiHandler.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ApiHandler from "../../src/ApiHandler/ApiHandler"; -import { KusamaEndpoints } from "../../src/constants"; - -export const getKusamaHandler = async () => { - const apiHandler = new ApiHandler(KusamaEndpoints); - await apiHandler.setAPI(); - await apiHandler.getApi()?.isReady; - let health = await apiHandler.healthCheck(); - while (!health) { - await new Promise((resolve) => setTimeout(resolve, 5000)); - health = await apiHandler.healthCheck(); - } - return apiHandler; -}; diff --git a/packages/common/test/testUtils/chaindata.ts b/packages/common/test/testUtils/chaindata.ts new file mode 100644 index 000000000..7f045c1fc --- /dev/null +++ b/packages/common/test/testUtils/chaindata.ts @@ -0,0 +1,14 @@ +import { ChainData } from "../../src"; +import ApiHandler from "../../src/ApiHandler/ApiHandler"; +import { KusamaEndpoints, KusamaPeopleEndpoints } from "../../src/constants"; + +export async function getKusamaChainData(): Promise { + const relayApiHandler = new ApiHandler(KusamaEndpoints); + const peopleApiHandler = new ApiHandler(KusamaPeopleEndpoints); + await Promise.all([relayApiHandler.getApi(), peopleApiHandler.getApi()]); + + return new ChainData({ + relay: relayApiHandler, + people: peopleApiHandler, + }); +} diff --git a/packages/common/test/testUtils/scorekeeper.ts b/packages/common/test/testUtils/scorekeeper.ts index 094d99966..0fa3d1b01 100644 --- a/packages/common/test/testUtils/scorekeeper.ts +++ b/packages/common/test/testUtils/scorekeeper.ts @@ -1,29 +1,29 @@ import { addProdKusamaCandidates } from "./candidate"; import { getKusamaProdConfig } from "./config"; -import { ScoreKeeper } from "../../src"; +import { ChainData, ScoreKeeper } from "../../src"; import ApiHandler from "../../src/ApiHandler/ApiHandler"; -import { KusamaEndpoints } from "../../src/constants"; +import { KusamaEndpoints, KusamaPeopleEndpoints } from "../../src/constants"; export const getAndStartScorekeeper = async () => { - const apiHandler = new ApiHandler(KusamaEndpoints); - await apiHandler.setAPI(); - await apiHandler.getApi()?.isReady; - let health = await apiHandler.healthCheck(); - while (!health) { - await new Promise((resolve) => setTimeout(resolve, 5000)); - health = await apiHandler.healthCheck(); - } + const relayApiHandler = new ApiHandler(KusamaEndpoints); + const peopleApiHandler = new ApiHandler(KusamaPeopleEndpoints); + await Promise.all([relayApiHandler.getApi(), peopleApiHandler.getApi()]); + + const chaindata = new ChainData({ + relay: relayApiHandler, + people: peopleApiHandler, + }); await addProdKusamaCandidates(); const config = getKusamaProdConfig(); - const scorekeeper = new ScoreKeeper(apiHandler, config); + const scorekeeper = new ScoreKeeper(chaindata, config); for (const nominatorGroup of config.scorekeeper.nominators) { await scorekeeper.addNominatorGroup(nominatorGroup); } - const didStart = await scorekeeper.begin(); + await scorekeeper.begin(); let isStarted = scorekeeper.isStarted; while (!isStarted) { diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 0d345492d..e404b3dd9 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -15,7 +15,6 @@ "src/index.ts", "src/logger.ts", "src/matrix.ts", - "src/monitor.ts", // "src/nominator.ts", // "src/scorekeeper.ts", // "src/server.ts", diff --git a/packages/core/Dockerfile b/packages/core/Dockerfile deleted file mode 100644 index 8fd6d5bed..000000000 --- a/packages/core/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM node:17-slim -ARG MATRIX_TOKEN -WORKDIR /code -COPY . . -RUN ["npm", "i"] -RUN ["npm", "run", "build"] -CMD ["npm", "run", "js:start"] diff --git a/packages/core/Dockerfile-dev b/packages/core/Dockerfile-dev deleted file mode 100644 index 6e4e0a919..000000000 --- a/packages/core/Dockerfile-dev +++ /dev/null @@ -1,7 +0,0 @@ -FROM node:18 AS builder -COPY . /app -WORKDIR /app -RUN yarn set version 3.2.2 && \ - yarn install && \ - yarn workspace @1kv/core build -CMD yarn start:dev:core diff --git a/packages/core/config/kusama.current.dev.sample.json b/packages/core/config/kusama.current.dev.sample.json index 28370f684..7338bb92a 100644 --- a/packages/core/config/kusama.current.dev.sample.json +++ b/packages/core/config/kusama.current.dev.sample.json @@ -4,11 +4,12 @@ "apiEndpoints": [ "wss://kusama-rpc-tn.dwellir.com", "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws", + "wss://kusama.public.curie.radiumblock.co/ws", "wss://rpc.ibp.network/kusama", "wss://rpc.dotters.network/kusama", "wss://ksm-rpc.stakeworld.io" ], + "apiPeopleEndpoints": ["wss://kusama-people-rpc.polkadot.io"], "kusamaBootstrapEndpoint": "https://kusama.w3f.community", "polkadotBootstrapEndpoint": "https://polkadot.w3f.community", "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/kusama.json" @@ -16,9 +17,10 @@ "constraints": { "skipConnectionTime": true, "skipIdentity": false, - "skipClientUpgrade": false, "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", + "clientUpgrade": { + "skip": false + }, "minSelfStake": 10000000000000, "commission": 150000000, "unclaimedEraThreshold": 4, diff --git a/packages/core/config/kusama.current.sample.json b/packages/core/config/kusama.current.sample.json index 371dbeb13..0084d8510 100644 --- a/packages/core/config/kusama.current.sample.json +++ b/packages/core/config/kusama.current.sample.json @@ -4,11 +4,12 @@ "apiEndpoints": [ "wss://kusama-rpc-tn.dwellir.com", "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws", + "wss://kusama.public.curie.radiumblock.co/ws", "wss://rpc.ibp.network/kusama", "wss://rpc.dotters.network/kusama", "wss://ksm-rpc.stakeworld.io" ], + "apiPeopleEndpoints": ["wss://kusama-people-rpc.polkadot.io"], "kusamaBootstrapEndpoint": "https://kusama.w3f.community", "polkadotBootstrapEndpoint": "https://polkadot.w3f.community", "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/kusama.json" @@ -37,9 +38,10 @@ "constraints": { "skipConnectionTime": true, "skipIdentity": false, - "skipClientUpgrade": false, "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", + "clientUpgrade": { + "skip": false + }, "minSelfStake": 10000000000000, "commission": 150000000, "unclaimedEraThreshold": 4, diff --git a/packages/core/config/kusama.microservice.dev.sample.json b/packages/core/config/kusama.microservice.dev.sample.json deleted file mode 100644 index 2fdcd6fa1..000000000 --- a/packages/core/config/kusama.microservice.dev.sample.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "global": { - "dryRun": false, - "networkPrefix": 2, - "apiEndpoints": [ - "wss://kusama-rpc-tn.dwellir.com", - "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws", - "wss://rpc.ibp.network/kusama", - "wss://rpc.dotters.network/kusama", - "wss://ksm-rpc.stakeworld.io" - ], - "kusamaBootstrapEndpoint": "https://kusama.w3f.community", - "polkadotBootstrapEndpoint": "https://polkadot.w3f.community", - "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/kusama.json" - }, - "cron": { - "monitorEnabled": true, - "clearOfflineEnabled": true, - "validityEnabled": true, - "scoreEnabled": true, - "executionEnabled": true, - "scorekeeperEnabled": true, - "rewardClaimingEnabled": true, - "cancelEnabled": true, - "staleEnabled": true, - "eraPointsEnabled": true, - "eraStatsEnabled": true, - "activeValidatorEnabled": true, - "inclusionEnabled": true, - "sessionKeyEnabled": true, - "unclaimedErasEnabled": true, - "validatorPrefEnabled": true, - "nominatorEnabled": true, - "locationStatsEnabled": true, - "blockEnabled": true - }, - "constraints": { - "skipConnectionTime": true, - "skipIdentity": false, - "skipClientUpgrade": false, - "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", - "minSelfStake": 10000000000000, - "commission": 150000000, - "unclaimedEraThreshold": 4, - "sanctionedGeoArea": { - "skip": false, - "sanctionedCountries": ["XXX"], - "sanctionedRegions": ["XXX"] - } - }, - "db": { - "mongo": { - "uri": "mongodb://mongo:27017" - } - }, - "matrix": { - "enabled": false, - "baseUrl": "https://matrix.org", - "room": "!mdugGIKqSTweIOpTlA:web3.foundation", - "userId": "@1kv-stats:matrix.org" - }, - "proxy": { - "timeDelayBlocks": "10850", - "blacklistedAnnouncements": [] - }, - "score": { - "inclusion": "200", - "spanInclusion": "200", - "discovered": "5", - "nominated": "30", - "rank": "5", - "bonded": "50", - "faults": "5", - "offline": "2", - "location": "40", - "region": "10", - "country": "10", - "provider": "100", - "nominations": "100", - "rpc": "100", - "client": "100", - "useInclusion": true, - "useSpanInclusion": true, - "useDiscovered": true, - "useNominated": true, - "useRank": true, - "useBonded": true, - "useFaults": true, - "useOffline": true, - "useLocation": true, - "useRegion": true, - "useCountry": true, - "useProvider": true, - "useNominations": true, - "useDelegations": true, - "useOpenGov": true, - "useOpenGovDelegation": true, - "useRpc": true, - "useClient": true - }, - "scorekeeper": { - "forceRound": false, - "nominating": false - }, - "redis": { - "enable": true, - "host": "redis", - "port": 6379 - }, - "server": { - "onlyHealth": true, - "port": 3300 - }, - "telemetry": { - "blacklistedProviders": [ - "Hetzner Online GmbH", - "Contabo Inc.", - "Contabo GmbH" - ], - "enable": false, - "chains": [ - "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe" - ], - "host": "wss://telemetry-backend.w3f.community/feed" - }, - "logger": { - "level": "info", - "excludedLabels": [ - "Location", - "ValidatorPrefJob" - ] - } -} diff --git a/packages/core/config/kusama.microservice.sample.json b/packages/core/config/kusama.microservice.sample.json deleted file mode 100644 index d25cb275d..000000000 --- a/packages/core/config/kusama.microservice.sample.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "global": { - "networkPrefix": 2, - "apiEndpoints": [ - "wss://kusama-rpc-tn.dwellir.com", - "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws", - "wss://rpc.ibp.network/kusama", - "wss://rpc.dotters.network/kusama", - "wss://ksm-rpc.stakeworld.io" - ], - - "kusamaBootstrapEndpoint": "https://kusama.w3f.community", - "polkadotBootstrapEndpoint": "https://polkadot.w3f.community", - "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/kusama.json" - }, - "constraints": { - "skipConnectionTime": true, - "skipIdentity": false, - "skipClientUpgrade": false, - "skipUnclaimed": false, - "forceClientVersion": "v0.9.30", - "minSelfStake": 10000000000000, - "commission": 150000000, - "unclaimedEraThreshold": 4, - "sanctionedGeoArea": { - "skip": false, - "sanctionedCountries": ["XXX"], - "sanctionedRegions": ["XXX"] - } - }, - "db": { - "mongo": { - "uri": "mongodb://mongo:27017" - } - }, - "matrix": { - "enabled": false, - "baseUrl": "https://matrix.org", - "room": "!mdugGIKqSTweIOpTlA:web3.foundation", - "userId": "@1kv-stats:matrix.org" - }, - "proxy": { - "timeDelayBlocks": "10850", - "blacklistedAnnouncements": [] - }, - "score": { - "inclusion": "200", - "spanInclusion": "200", - "discovered": "5", - "nominated": "30", - "rank": "5", - "bonded": "50", - "faults": "5", - "offline": "2", - "location": "40", - "region": "10", - "country": "10", - "provider": "100", - "nominations": "100" - }, - "scorekeeper": { - "forceRound": false, - "nominating": false - }, - "redis": { - "enable": true, - "host": "redis", - "port": 6379 - }, - "server": { - "onlyHealth": true, - "port": 3300 - }, - "telemetry": { - "blacklistedProviders": [ - "Hetzner Online GmbH", - "Contabo Inc.", - "Contabo GmbH" - ], - "enable": false, - "chains": [ - "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe" - ], - "host": "wss://telemetry-backend.w3f.community/feed" - }, - "logger": { - "level": "info", - "excludedLabels": [ - "Location", - "ValidatorPrefJob" - ] - } -} diff --git a/packages/core/config/main.sample.json b/packages/core/config/main.sample.json index 6bc510aec..4f02f73ac 100644 --- a/packages/core/config/main.sample.json +++ b/packages/core/config/main.sample.json @@ -22,8 +22,10 @@ "skipConnectionTime": true, "skipIdentity": false, "skipStakedDestination": true, - "skipClientUpgrade": true, "skipUnclaimed": true, + "clientUpgrade": { + "skip": false + }, "minSelfStake": 100000, "commission": 150000000, "unclaimedEraThreshold": 4, @@ -121,10 +123,6 @@ "enable": true, "port": 3300 }, - "redis": { - "host": "redis", - "port": 6379 - }, "telemetry": { "blacklistedProviders": [ "Hetzner Online GmbH", diff --git a/packages/core/config/polkadot.current.dev.sample.json b/packages/core/config/polkadot.current.dev.sample.json index 5ae6c494a..64355dc14 100644 --- a/packages/core/config/polkadot.current.dev.sample.json +++ b/packages/core/config/polkadot.current.dev.sample.json @@ -36,9 +36,10 @@ "constraints": { "skipConnectionTime": true, "skipIdentity": false, - "skipClientUpgrade": false, - "forceClientVersion": "v0.9.39", "skipUnclaimed": true, + "clientUpgrade": { + "skip": false + }, "minSelfStake": 50000000000000, "commission": 50000000, "unclaimedEraThreshold": 1, diff --git a/packages/core/config/polkadot.current.sample.json b/packages/core/config/polkadot.current.sample.json index 3912aac70..339893c3b 100644 --- a/packages/core/config/polkadot.current.sample.json +++ b/packages/core/config/polkadot.current.sample.json @@ -13,9 +13,10 @@ "constraints": { "skipConnectionTime": false, "skipIdentity": false, - "skipClientUpgrade": false, - "forceClientVersion": "v0.9.39", "skipUnclaimed": true, + "clientUpgrade": { + "skip": false + }, "minSelfStake": 50000000000000, "commission": 50000000, "unclaimedEraThreshold": 1, diff --git a/packages/core/config/polkadot.microservice.dev.sample.json b/packages/core/config/polkadot.microservice.dev.sample.json deleted file mode 100644 index 9c542ccea..000000000 --- a/packages/core/config/polkadot.microservice.dev.sample.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "global": { - "networkPrefix": 0, - "apiEndpoints": [ - "wss://rpc.dotters.network/polkadot", - "wss://dot-rpc.stakeworld.io", - "wss://polkadot.public.curie.radiumblock.co/ws", - "wss://rpc.ibp.network/polkadot", - "wss://polkadot-rpc-tn.dwellir.com" - ], - "kusamaBootstrapEndpoint": "https://kusama.w3f.community", - "polkadotBootstrapEndpoint": "https://polkadot.w3f.community", - "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/polkadot.json" - }, - "constraints": { - "skipConnectionTime": false, - "skipIdentity": false, - "skipClientUpgrade": false, - "forceClientVersion": "v0.9.39", - "skipUnclaimed": true, - "minSelfStake": 50000000000000, - "commission": 50000000, - "unclaimedEraThreshold": 1, - "sanctionedGeoArea": { - "skip": false, - "sanctionedCountries": ["XXX"], - "sanctionedRegions": ["XXX"] - } - }, - "db": { - "mongo": { - "uri": "mongodb://mongo:27017" - } - }, - "matrix": { - "enabled": false, - "baseUrl": "https://matrix.org", - "room": "!mdugGIKqSTweIOpTlA:web3.foundation", - "userId": "@1kv-stats:matrix.org" - }, - "proxy": { - "timeDelayBlocks": "10850", - "blacklistedAnnouncements": [] - }, - "score": { - "inclusion": "200", - "spanInclusion": "200", - "discovered": "5", - "nominated": "30", - "rank": "5", - "bonded": "50", - "faults": "5", - "offline": "2", - "location": "40", - "region": "10", - "country": "10", - "provider": "100", - "nominations": "100", - "rpc": "100", - "client": "100", - "useInclusion": true, - "useSpanInclusion": true, - "useDiscovered": true, - "useNominated": true, - "useRank": true, - "useBonded": true, - "useFaults": true, - "useOffline": true, - "useLocation": true, - "useRegion": true, - "useCountry": true, - "useProvider": true, - "useNominations": true, - "useDelegations": true, - "useOpenGov": true, - "useOpenGovDelegation": true, - "useRpc": true, - "useClient": true - }, - "scorekeeper": { - "forceRound": false, - "nominating": false - }, - "redis": { - "host": "redis", - "port": 6379 - }, - "server": { - "onlyHealth": true, - "port": 3300 - }, - "telemetry": { - "blacklistedProviders": [ - "Hetzner Online GmbH", - "Contabo Inc.", - "Contabo GmbH" - ], - "enable": false, - "chains": [ - "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe" - ], - "host": "wss://telemetry-backend.w3f.community/feed" - }, - "logger": { - "level": "info", - "excludedLabels": [ - "Location", - "ValidatorPrefJob" - ] - } -} diff --git a/packages/core/config/polkadot.microservice.sample.json b/packages/core/config/polkadot.microservice.sample.json deleted file mode 100644 index 603658eb7..000000000 --- a/packages/core/config/polkadot.microservice.sample.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "global": { - "networkPrefix": 0, - "apiEndpoints": [ - "wss://rpc.dotters.network/polkadot", - "wss://dot-rpc.stakeworld.io", - "wss://polkadot.public.curie.radiumblock.co/ws", - "wss://rpc.ibp.network/polkadot", - "wss://polkadot-rpc-tn.dwellir.com" - ], - "kusamaBootstrapEndpoint": "https://kusama.w3f.community", - "polkadotBootstrapEndpoint": "https://polkadot.w3f.community", - "candidatesUrl": "https://raw.githubusercontent.com/w3f/1k-validators-be/master/candidates/polkadot.json" - }, - "constraints": { - "skipConnectionTime": false, - "skipIdentity": false, - "skipClientUpgrade": false, - "forceClientVersion": "v0.9.39", - "skipUnclaimed": true, - "minSelfStake": 50000000000000, - "commission": 50000000, - "unclaimedEraThreshold": 1, - "sanctionedGeoArea": { - "skip": false, - "sanctionedCountries": ["XXX"], - "sanctionedRegions": ["XXX"] - } - }, - "db": { - "mongo": { - "uri": "mongodb://mongo:27017" - } - }, - "matrix": { - "enabled": false, - "baseUrl": "https://matrix.org", - "room": "!mdugGIKqSTweIOpTlA:web3.foundation", - "userId": "@1kv-stats:matrix.org" - }, - "proxy": { - "timeDelayBlocks": "10850", - "blacklistedAnnouncements": [] - }, - "score": { - "inclusion": "200", - "spanInclusion": "200", - "discovered": "5", - "nominated": "30", - "rank": "5", - "bonded": "50", - "faults": "5", - "offline": "2", - "location": "40", - "region": "10", - "country": "10", - "provider": "100", - "nominations": "100", - "rpc": "100", - "client": "100", - "useInclusion": true, - "useSpanInclusion": true, - "useDiscovered": true, - "useNominated": true, - "useRank": true, - "useBonded": true, - "useFaults": true, - "useOffline": true, - "useLocation": true, - "useRegion": true, - "useCountry": true, - "useProvider": true, - "useNominations": true, - "useDelegations": true, - "useOpenGov": true, - "useOpenGovDelegation": true, - "useRpc": true, - "useClient": true - }, - "scorekeeper": { - "forceRound": false, - "nominating": false - }, - "redis": { - "enable": true, - "host": "redis", - "port": 6379 - }, - "server": { - "onlyHealth": true, - "port": 3300 - }, - "telemetry": { - "blacklistedProviders": [ - "Hetzner Online GmbH", - "Contabo Inc.", - "Contabo GmbH" - ], - "enable": false, - "chains": [ - "0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe" - ], - "host": "wss://telemetry-backend.w3f.community/feed" - }, - "logger": { - "level": "info", - "excludedLabels": [ - "Location", - "ValidatorPrefJob" - ] - } -} diff --git a/packages/core/esbuild.js b/packages/core/esbuild.js deleted file mode 100644 index 1f0e2edf6..000000000 --- a/packages/core/esbuild.js +++ /dev/null @@ -1,87 +0,0 @@ -import esbuild from "esbuild"; - -const externalPackages = [ - "@polkadot/api-augment", - "velocityjs", - "dustjs-linkedin", - "atpl", - "liquor", - "twig", - "eco", - "jazz", - "jqtpl", - "hamljs", - "hamlet", - "whiskers", - "haml-coffee", - "hogan.js", - "templayed", - "underscore", - "walrus", - "mustache", - "just", - "ect", - "mote", - "toffee", - "dot", - "bracket-template", - "ractive", - "htmling", - "babel-core", - "plates", - "vash", - "slm", - "marko", - "teacup/lib/express", - "coffee-script", - "squirrelly", - "twing", - "matris-js-sdk", - "@1kv/telemetry", - "@1kv/gateway", - "@1kv/common", -]; - -const isProduction = process.argv.includes("--prod"); - -const buildOptions = { - entryPoints: ["src/index.ts"], - bundle: true, - minify: isProduction, - platform: "node", - target: "node18", - external: externalPackages, - outdir: "build", - // entryNames: "[dir]/[name].mjs", - tsconfig: "tsconfig.json", - splitting: true, - format: "esm", - // outExtension: { ".js": ".mjs" }, - sourcemap: !isProduction, - logLevel: "info", -}; - -if (process.argv.includes("--watch")) { - buildOptions.watch = { - onRebuild(error, result) { - if (error) console.error("watch build failed:", error); - else - console.log( - "watch build succeeded at", - new Date().toLocaleTimeString(), - ); - }, - }; - console.log("watch mode enabled"); -} - -if (isProduction) { - buildOptions.define = { - "process.env.NODE_ENV": "'production'", - }; -} - -esbuild.build(buildOptions).catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/core/package.json b/packages/core/package.json index 9e246ee40..13579b7b2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,37 +1,27 @@ { "name": "@1kv/core", - "version": "3.3.0", + "version": "3.3.1", "description": "Services for running the Thousand Validator Program.", "main": "index.js", "scripts": { "open:polkadot-apps": "open-cli https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/staking", "open:telemetry": "open-cli http://localhost:3000", "build": "tsc --build tsconfig.json", - "build:prod": "node esbuild.js --prod", "docker": "docker-compose rm -f; docker-compose build --no-cache; docker-compose up -d", "clean": "../../node_modules/.bin/rimraf ./build tsconfig.tsbuildinfo combined.log", "clean:build": "yarn clean && yarn build", - "create-config-kusama-current-dev": "cp ./config/kusama.current.dev.sample.json ./config/main.json && cp ./config/secret.sample.json ./config/secret.json", - "create-config-polkadot-current-dev": "cp ./config/polkadot.current.dev.sample.json ./config/main.json && cp ./config/secret.sample.json ./config/secret.json", - "create-config-kusama-microservice-dev": "cp ./config/kusama.microservice.dev.sample.json ./config/main.json && cp ./config/secret.sample.json ./config/secret.json", - "create-config-polkadot-microservice-dev": "cp ./config/polkadot.microservice.dev.sample.json ./config/main.json && cp ./config/secret.sample.json ./config/secret.json", "create-config-kusama-current": "cp ./config/kusama.current.sample.json ./config/main.json && cp ./config/secret.sample.json ./config/secret.json", "create-config-polkadot-current": "cp ./config/polkadot.current.sample.json ./config/main.json && cp ./config/secret.sample.json ./config/secret.json", - "create-config-kusama-microservice": "cp ./config/kusama.microservice.sample.json ./config/main.json && cp ./config/secret.sample.json ./config/secret.json", - "create-config-polkadot-microservice": "cp ./config/polkadot.microservice.sample.json ./config/main.json && cp ./config/secret.sample.json ./config/secret.json", "lint": "../../node_modules/.bin/eslint 'src/**/*.{js,ts,tsx}' --quiet", "lint:fix": "../../node_modules/.bin/eslint 'src/**/*.{js,ts,tsx, json}' --quiet --fix", - "start": "NODE_OPTIONS='--max-old-space-size=8096' ts-node src/index.ts start", - "start:watch": "nodemon --watch build --exec node --max-old-space-size=8024 build/index.js", - "start:dev": "node esbuild.js --watch & nodemon --watch build --exec node --max-old-space-size=8024 build/index.mjs", + "start:dev": "NODE_OPTIONS='--max-old-space-size=8096' ts-node src/index.ts start", + "watch": "npx nodemon --watch src -x \"yarn start:dev\"", "js:start": "NODE_OPTIONS='--max-old-space-size=10096' node build/index.js start", - "test": "yarn test:unit && yarn test:int", - "test:unit": "jest --config=jest.unit.config.js --verbose", - "test:int": "jest --config=jest.int.config.js --verbose", - "test:watch": "jest --watch", - "test:candidates": "ts-node test/validateCandidates.ts", "writeMatrix": "ts-node test/candidatesMatrix.ts" }, "author": "Web3 Foundation ", - "license": "GPL-3.0" + "license": "GPL-3.0", + "dependencies": { + "@1kv/common": "*" + } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 83432a66d..d307bb558 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -2,6 +2,7 @@ import { Command } from "commander"; import { ApiHandler, + Types, Config, Constants, Db, @@ -10,9 +11,11 @@ import { queries, ScoreKeeper, Util, + ChainData, } from "@1kv/common"; import { Server } from "@1kv/gateway"; import { TelemetryClient } from "@1kv/telemetry"; +import { ConfigSchema } from "@1kv/common/build/config"; const isCI = process.env.CI; @@ -29,38 +32,23 @@ const catchAndQuit = async (fn: any) => { } }; -export const createAPIHandler = async (config, retries = 0) => { - try { - logger.info("Creating API Handler", winstonLabel); - // Determine the correct set of endpoints based on the network prefix. - const endpoints = - config.global.networkPrefix === 2 || config.global.networkPrefix === 0 - ? config.global.apiEndpoints - : Constants.LocalEndpoints; - - const handler = new ApiHandler(endpoints); - await handler.setAPI(); - - // Check API health before proceeding. - let health = await handler.healthCheck(); - while (!health) { - logger.info("Waiting for API to connect...", winstonLabel); - await Util.sleep(1000); - health = await handler.healthCheck(); - } +export const createAPIHandlers = async ( + config: ConfigSchema, +): Promise => { + logger.info("Creating API Handler", winstonLabel); + // Determine the correct set of endpoints based on the network prefix. + const endpoints = + config.global.networkPrefix === 2 || config.global.networkPrefix === 0 + ? config.global.apiEndpoints + : Constants.LocalEndpoints; - return handler; - } catch (e) { - logger.error(`Error: ${e.message || e.toString()}`, winstonLabel); - - if (retries < 20) { - logger.info(`Retrying... attempt: ${retries}`, winstonLabel); - return await createAPIHandler(config, retries + 1); - } else { - logger.error("Retries exceeded", winstonLabel); - throw new Error("Unable to create API Handler after multiple retries."); - } - } + const relayHandler = new ApiHandler(endpoints); + + const peopleHandler = config.global.apiPeopleEndpoints + ? new ApiHandler(config.global.apiPeopleEndpoints) + : relayHandler; + + return { relay: relayHandler, people: peopleHandler }; }; export const createDB = async (config) => { @@ -74,7 +62,11 @@ export const createDB = async (config) => { } }; -export const createServer = async (config, handler?, scorekeeper?) => { +export const createServer = async ( + config: ConfigSchema, + handler: ApiHandler, + scorekeeper?, +) => { try { logger.info(`Creating Server`, winstonLabel); const server = new Server(config, handler, scorekeeper); @@ -198,11 +190,15 @@ export const setChainMetadata = async (config) => { } }; -export const initScorekeeper = async (config, handler, maybeBot) => { +export const initScorekeeper = async ( + config: ConfigSchema, + chaindata: ChainData, + maybeBot: any, +) => { try { logger.info(`Creating Scorekeeper`, winstonLabel); // Set up the nominators in the scorekeeper. - const scorekeeper = new ScoreKeeper(handler, config, maybeBot); + const scorekeeper = new ScoreKeeper(chaindata, config, maybeBot); for (const nominatorGroup of config.scorekeeper.nominators) { await scorekeeper.addNominatorGroup(nominatorGroup); } @@ -221,7 +217,7 @@ const start = async (cmd: { config: string }) => { logger.info(`Starting the backend services. ${version}`, winstonLabel); logger.info(`Network prefix: ${config.global.networkPrefix}`, winstonLabel); - const handler = await createAPIHandler(config); + const apiHandlers = await createAPIHandlers(config); // Create the Database. await createDB(config); @@ -232,14 +228,13 @@ const start = async (cmd: { config: string }) => { // Create the matrix bot if enabled. const maybeBot = await createMatrixBot(config); - const api = handler.getApi(); - while (!api) { - logger.info(`Waiting for API to connect...`, winstonLabel); - await Util.sleep(1000); - } + await apiHandlers.relay.getApi(); + await apiHandlers.people.getApi(); + + const chaindata = new ChainData(apiHandlers); // Create the scorekeeper. - const scorekeeper = await initScorekeeper(config, handler, maybeBot); + const scorekeeper = await initScorekeeper(config, chaindata, maybeBot); // Clean the DB. await clean(scorekeeper); @@ -248,7 +243,7 @@ const start = async (cmd: { config: string }) => { await addCleanCandidates(config); // Start the API server. - await createServer(config, handler, scorekeeper); + await createServer(config, apiHandlers.relay, scorekeeper); // Start the telemetry client. await createTelemetry(config); diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index a934b32cf..acb774fb1 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -10,8 +10,7 @@ "paths": { "@1kv/common": ["../common/build"], "@1kv/gateway": ["../gateway/build"], - "@1kv/telemetry": ["../telemetry/build"], - "@1kv/worker": ["../worker/build"] + "@1kv/telemetry": ["../telemetry/build"] }, /* Basic Options */ "target": "es2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ @@ -74,7 +73,6 @@ "references": [ { "path": "../common" }, { "path": "../gateway" }, - { "path": "../telemetry" }, - { "path": "../worker" } + { "path": "../telemetry" } ] } diff --git a/packages/gateway/Dockerfile b/packages/gateway/Dockerfile deleted file mode 100644 index 8fd6d5bed..000000000 --- a/packages/gateway/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM node:17-slim -ARG MATRIX_TOKEN -WORKDIR /code -COPY . . -RUN ["npm", "i"] -RUN ["npm", "run", "build"] -CMD ["npm", "run", "js:start"] diff --git a/packages/gateway/Dockerfile-dev b/packages/gateway/Dockerfile-dev deleted file mode 100644 index 33b50a4a7..000000000 --- a/packages/gateway/Dockerfile-dev +++ /dev/null @@ -1,8 +0,0 @@ -FROM node:18 AS builder -COPY . /app -WORKDIR /app -RUN yarn set version 3.2.2 && \ - yarn install && \ - yarn workspace @1kv/common build && \ - yarn workspace @1kv/gateway build -CMD yarn start:dev:gateway diff --git a/packages/gateway/config/sample.json b/packages/gateway/config/sample.json index 01c25d60b..9be5e3971 100644 --- a/packages/gateway/config/sample.json +++ b/packages/gateway/config/sample.json @@ -4,11 +4,6 @@ "uri": "mongodb://mongo:27017" } }, - "redis": { - "host": "redis", - "port": 6379, - "cache": 180000 - }, "server": { "port": 3301 } diff --git a/packages/gateway/esbuild.mjs b/packages/gateway/esbuild.mjs deleted file mode 100644 index df171caab..000000000 --- a/packages/gateway/esbuild.mjs +++ /dev/null @@ -1,97 +0,0 @@ -import esbuild from "esbuild"; -import packageJson from '../../package.json' assert {type: 'json'}; - -const deps = Object.keys(packageJson.dependencies || {}); - - -const externalPackages = [ - "@polkadot/api-augment", - "velocityjs", - "dustjs-linkedin", - "atpl", - "liquor", - "twig", - "eco", - "jazz", - "jqtpl", - "hamljs", - "hamlet", - "whiskers", - "haml-coffee", - "hogan.js", - "templayed", - "underscore", - "walrus", - "mustache", - "just", - "ect", - "mote", - "toffee", - "dot", - "bracket-template", - "ractive", - "htmling", - "babel-core", - "plates", - "vash", - "slm", - "marko", - "teacup/lib/express", - "coffee-script", - "squirrelly", - "twing", - "matris-js-sdk", - "@1kv/telemetry", - "@1kv/gateway", - "tty", - "koa", - "coingecko-api-v3", - "node-mongodb-native", - "mongoose", - "events" - "@bull-board" - // "@1kv/common" -]; - -const isProduction = process.argv.includes("--prod"); - -const buildOptions = { - entryPoints: ["src/index.ts"], - bundle: true, - minify: isProduction, - platform: "node", - target: "node18", - external: [...deps, ...externalPackages], - outdir: "build", - tsconfig: "tsconfig.json", - splitting: false, - format: "esm", - chunkNames: "chunks/[name]-[hash]", - sourcemap: !isProduction, - logLevel: "info", -}; - -if (process.argv.includes("--watch")) { - buildOptions.watch = { - onRebuild(error, result) { - if (error) console.error("watch build failed:", error); - else - console.log( - "watch build succeeded at", - new Date().toLocaleTimeString(), - ); - }, - }; - console.log("watch mode enabled"); -} - -if (isProduction) { - buildOptions.define = { - "process.env.NODE_ENV": "'production'", - }; -} - -esbuild.build(buildOptions).catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 0ad3e4e1b..c2397f4f9 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -1,18 +1,13 @@ { "name": "@1kv/gateway", - "version": "3.3.0", + "version": "3.3.1", "description": "Services for running the Thousand Validator Program.", "main": "build/index.js", "types": "build/index.d.ts", "scripts": { "build": "tsc --build tsconfig.json", - "build:prod": "node esbuild.mjs --prod", "clean": "../../node_modules/.bin/rimraf ./build tsconfig.tsbuildinfo combined.log", "clean:build": "yarn clean && yarn build", - "create-config-kusama-microservice": "cp config/sample.json ./config/main.json", - "create-config-kusama-microservice-dev": "cp config/sample.json ./config/main.json", - "create-config-polkadot-microservice": "cp config/sample.json ./config/main.json", - "create-config-polkadot-microservice-dev": "cp config/sample.json ./config/main.json", "docker": "docker-compose rm -f; docker-compose build --no-cache; docker-compose up -d", "lint": "../../node_modules/.bin/eslint 'src/**/*.{js,ts,tsx}' --quiet", "lint:fix": "../../node_modules/.bin/eslint 'src/**/*.{js,ts,tsx}' --quiet --fix", @@ -22,5 +17,8 @@ "js:start": "NODE_OPTIONS='--max-old-space-size=6096' node --es-module-specifier-resolution=node build/run.js start" }, "author": "Web3 Foundation ", - "license": "GPL-3.0" + "license": "GPL-3.0", + "dependencies": { + "@1kv/common": "*" + } } diff --git a/packages/gateway/src/constants.ts b/packages/gateway/src/constants.ts new file mode 100644 index 000000000..d2d3fb711 --- /dev/null +++ b/packages/gateway/src/constants.ts @@ -0,0 +1 @@ +export const gatewayLabel = { label: "Gateway" }; diff --git a/packages/gateway/src/controllers/Candidate.ts b/packages/gateway/src/controllers/Candidate.ts index 9e6fe75c8..962fb5686 100644 --- a/packages/gateway/src/controllers/Candidate.ts +++ b/packages/gateway/src/controllers/Candidate.ts @@ -1,7 +1,7 @@ import * as CandidateService from "../services/Candidate"; import { response } from "./index"; import { logger } from "@1kv/common"; -import { gatewayLabel } from "../run"; +import { gatewayLabel } from "../constants"; import { requestEmitter } from "../events/requestEmitter"; export default class CandidateController { diff --git a/packages/gateway/src/controllers/EraPoints.ts b/packages/gateway/src/controllers/EraPoints.ts index 3d57849ad..a775772b0 100644 --- a/packages/gateway/src/controllers/EraPoints.ts +++ b/packages/gateway/src/controllers/EraPoints.ts @@ -1,7 +1,7 @@ import { response } from "./index"; import * as EraPointsService from "../services/EraPoints"; import { logger } from "@1kv/common"; -import { gatewayLabel } from "../run"; +import { gatewayLabel } from "../constants"; import { requestEmitter } from "../events/requestEmitter"; export default class EraPointsController { diff --git a/packages/gateway/src/controllers/Location.ts b/packages/gateway/src/controllers/Location.ts index 4d7503bb2..ee00173be 100644 --- a/packages/gateway/src/controllers/Location.ts +++ b/packages/gateway/src/controllers/Location.ts @@ -1,7 +1,7 @@ import { response } from "./index"; import * as LocationService from "../services/LocationService"; import { logger } from "@1kv/common"; -import { gatewayLabel } from "../run"; +import { gatewayLabel } from "../constants"; import { requestEmitter } from "../events/requestEmitter"; export default class LocationController { diff --git a/packages/gateway/src/controllers/Nomination.ts b/packages/gateway/src/controllers/Nomination.ts index 341fbbb50..15b492b65 100644 --- a/packages/gateway/src/controllers/Nomination.ts +++ b/packages/gateway/src/controllers/Nomination.ts @@ -1,7 +1,7 @@ import { logger } from "@1kv/common"; import { response } from "./index"; import * as NominationService from "../services/Nomination"; -import { gatewayLabel } from "../run"; +import { gatewayLabel } from "../constants"; import { requestEmitter } from "../events/requestEmitter"; export default class NominationController { diff --git a/packages/gateway/src/controllers/Nominator.ts b/packages/gateway/src/controllers/Nominator.ts index 2ebab5ace..4b979d611 100644 --- a/packages/gateway/src/controllers/Nominator.ts +++ b/packages/gateway/src/controllers/Nominator.ts @@ -1,7 +1,7 @@ import { response } from "./index"; import * as NominatorService from "../services/Nominator"; import { logger } from "@1kv/common"; -import { gatewayLabel } from "../run"; +import { gatewayLabel } from "../constants"; import { requestEmitter } from "../events/requestEmitter"; export default class NominatorController { diff --git a/packages/gateway/src/controllers/Score.ts b/packages/gateway/src/controllers/Score.ts index 470d00eae..d7a924f62 100644 --- a/packages/gateway/src/controllers/Score.ts +++ b/packages/gateway/src/controllers/Score.ts @@ -1,7 +1,7 @@ import { response } from "./index"; import * as ScoreService from "../services/Score"; import { logger } from "@1kv/common"; -import { gatewayLabel } from "../run"; +import { gatewayLabel } from "../constants"; import { requestEmitter } from "../events/requestEmitter"; export default class ScoreController { diff --git a/packages/gateway/src/controllers/Stats.ts b/packages/gateway/src/controllers/Stats.ts index d97040fde..deb0a53a9 100644 --- a/packages/gateway/src/controllers/Stats.ts +++ b/packages/gateway/src/controllers/Stats.ts @@ -1,7 +1,7 @@ import { logger } from "@1kv/common"; import { response } from "./index"; import * as StatsService from "../services/Stats"; -import { gatewayLabel } from "../run"; +import { gatewayLabel } from "../constants"; export default class StatsController { public static async getLocationStats(context: any): Promise { diff --git a/packages/gateway/src/controllers/Validators.ts b/packages/gateway/src/controllers/Validators.ts index 7323a09c9..15be90560 100644 --- a/packages/gateway/src/controllers/Validators.ts +++ b/packages/gateway/src/controllers/Validators.ts @@ -1,10 +1,8 @@ import { response } from "./index"; import * as ValidatorService from "../services/Validator"; import { logger } from "@1kv/common"; -import { gatewayLabel } from "../run"; import { requestEmitter } from "../events/requestEmitter"; - -const label = { label: "Gateway" }; +import { gatewayLabel } from "../constants"; export default class ValidatorController { public static async getLatestValidatorSet(context: any): Promise { diff --git a/packages/gateway/src/routes/setupRoutes.ts b/packages/gateway/src/routes/setupRoutes.ts index fecaf8de5..e29c63a92 100644 --- a/packages/gateway/src/routes/setupRoutes.ts +++ b/packages/gateway/src/routes/setupRoutes.ts @@ -5,7 +5,6 @@ import path from "path"; import mount from "koa-mount"; import yamljs from "yamljs"; import { koaSwagger } from "koa2-swagger-ui"; -import { Queue } from "bullmq"; import Koa from "koa"; @@ -23,7 +22,7 @@ export const setupHealthCheckRoute = ( ): boolean => { try { const version = packageJson.version; - const isConnected = handler?.isConnected(); + const isConnected = handler?.isConnected; const currentEndpoint = handler?.currentEndpoint(); const response = { @@ -35,9 +34,8 @@ export const setupHealthCheckRoute = ( routerInstance.get("/healthcheck", async (ctx) => { if (handler) { - const isConnected = handler.isConnected(); + const isConnected = handler.isConnected; if (isConnected) { - const isHealthy = await handler.healthCheck(); ctx.body = JSON.stringify(response); ctx.status = 200; } else { @@ -132,87 +130,6 @@ export const setupDocs = (app: Koa, config: Config.ConfigSchema): boolean => { } }; -// export const setupMicroserviceRoutes = async ( -// app: Koa, -// config: Config.ConfigSchema, -// queues: Queue[], -// ): Promise => { -// try { -// if (config?.redis?.host && config?.redis?.port) { -// await addQueues(config, queues); -// setupBullBoard(app, queues); -// } -// return true; -// } catch (e) { -// logger.error(`Error setting up microservice routes: ${e}`, { -// label: "Gateway", -// }); -// return false; -// } -// }; - -// Add BullMQ Queues for Microservice Jobs -// export const addQueues = async ( -// config: Config.ConfigSchema, -// queues: Queue[], -// ): Promise => { -// try { -// const releaseMonitorQueue = new Queue("releaseMonitor", { -// connection: { -// host: config?.redis?.host, -// port: config?.redis?.port, -// }, -// }); -// const constraintsQueue = new Queue("constraints", { -// connection: { -// host: config?.redis?.host, -// port: config?.redis?.port, -// }, -// }); -// const chaindataQueue = new Queue("chaindata", { -// connection: { -// host: config?.redis?.host, -// port: config?.redis?.port, -// }, -// }); -// const blockQueue = new Queue("block", { -// connection: { -// host: config?.redis?.host, -// port: config?.redis?.port, -// }, -// }); -// -// queues.push( -// releaseMonitorQueue, -// constraintsQueue, -// chaindataQueue, -// blockQueue, -// ); -// return true; -// } catch (e) { -// logger.error(`Error adding queues: ${e}`, { label: "Gateway" }); -// return false; -// } -// }; - -// export const setupBullBoard = (app: Koa, queues: Queue[]): boolean => { -// try { -// const serverAdapter = new KoaAdapter(); -// createBullBoard({ -// queues: queues.map((queue) => { -// return new BullMQAdapter(queue); -// }), -// serverAdapter, -// }); -// serverAdapter.setBasePath("/bull"); -// app.use(serverAdapter.registerPlugin()); -// return true; -// } catch (e) { -// logger.error(`Error setting up BullBoard: ${e}`, { label: "Gateway" }); -// return false; -// } -// }; - export const setupCache = (app: Koa, configCache: number): boolean => { try { logger.info(`Cache set to ${configCache}`, { label: "Gateway" }); @@ -243,7 +160,6 @@ export const setupRoutes = async ( config: Config.ConfigSchema, port: number, enable: boolean, - queues?: Queue[], cache?: number, handler?: ApiHandler, scorekeeper?: ScoreKeeper, @@ -274,9 +190,6 @@ export const setupRoutes = async ( setupScorekeeperRoutes(router, app, scorekeeper); setupDocs(app, config); - // Setup microservice routes if Redis is configured in config - // await setupMicroserviceRoutes(app, config, queues); - // Serve all other routes app.use(router.routes()); } diff --git a/packages/gateway/src/run.ts b/packages/gateway/src/run.ts deleted file mode 100644 index cbc03aa3b..000000000 --- a/packages/gateway/src/run.ts +++ /dev/null @@ -1,41 +0,0 @@ -import Server from "./server"; -import { Command } from "commander"; -import { Config, Db, logger } from "@1kv/common"; -import path from "path"; - -const version = "v2.6.87"; - -const catchAndQuit = async (fn: any) => { - try { - await fn; - } catch (e) { - console.error(JSON.stringify(e)); - process.exit(1); - } -}; - -export const gatewayLabel = { label: "Gateway" }; - -const start = async (cmd: { config: string }) => { - const config = Config.loadConfig(path.join(cmd.config, "main.json")); - - logger.info(`starting the backend services. ${version}`, gatewayLabel); - const db = await Db.create(config.db.mongo.uri); - const server = new Server(config); - server.start(); -}; - -const program = new Command(); - -if (require.main === module) { - program - .option( - "--config ", - "The path to the config directory.", - "config", - ) - .action((cmd: { config: string }) => catchAndQuit(start(cmd))); - - program.version(version); - program.parse(process.argv); -} diff --git a/packages/gateway/src/server.ts b/packages/gateway/src/server.ts index 11494be5a..f6976c4f2 100644 --- a/packages/gateway/src/server.ts +++ b/packages/gateway/src/server.ts @@ -6,7 +6,6 @@ import { logger, ScoreKeeper, } from "@1kv/common"; -import { Queue } from "bullmq"; import { setupRoutes } from "./routes/setupRoutes"; import { requestEmitter } from "./events/requestEmitter"; @@ -17,7 +16,6 @@ export default class Server { private enable = true; private cache = 180000; private config: Config.ConfigSchema; - private queues: Queue[] = []; private handler: ApiHandler | null; private scorekeeper: ScoreKeeper | null; @@ -36,7 +34,6 @@ export default class Server { this.cache = config?.server?.cache || Constants.GATEWAY_CACHE_TTL; this.handler = handler || null; this.scorekeeper = scorekeeper || null; - this.queues = []; requestEmitter.on("requestReceived", this.updateRequestCounts.bind(this)); @@ -71,7 +68,6 @@ export default class Server { this.config, this.port, this.enable, - this.queues, this.cache, this.handler, this.scorekeeper, diff --git a/packages/gateway/tsconfig.json b/packages/gateway/tsconfig.json index 00fa5fc96..00a07d46c 100644 --- a/packages/gateway/tsconfig.json +++ b/packages/gateway/tsconfig.json @@ -3,7 +3,6 @@ "exclude": ["test", "node_modules"], "include": ["src/**/*.ts", "src/**/*.yml"], "files": [ - "src/run.ts", "src/index.ts", "src/server.ts", ], diff --git a/packages/scorekeeper-status-ui/package.json b/packages/scorekeeper-status-ui/package.json index 8355cfa08..7a2c9fcc6 100644 --- a/packages/scorekeeper-status-ui/package.json +++ b/packages/scorekeeper-status-ui/package.json @@ -1,12 +1,11 @@ { "name": "@1kv/scorekeeper-status-ui", "private": true, - "version": "3.3.0", + "version": "3.3.1", "type": "module", "scripts": { "dev": "vite", "build": "tsc && vite build", - "build:prod": "vite build", "preview": "vite preview", "clean": "rm -rf dist" }, diff --git a/packages/telemetry/Dockerfile b/packages/telemetry/Dockerfile deleted file mode 100644 index 8fd6d5bed..000000000 --- a/packages/telemetry/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM node:17-slim -ARG MATRIX_TOKEN -WORKDIR /code -COPY . . -RUN ["npm", "i"] -RUN ["npm", "run", "build"] -CMD ["npm", "run", "js:start"] diff --git a/packages/telemetry/Dockerfile-dev b/packages/telemetry/Dockerfile-dev deleted file mode 100644 index 029641d54..000000000 --- a/packages/telemetry/Dockerfile-dev +++ /dev/null @@ -1,8 +0,0 @@ -FROM node:18 AS builder -COPY . /app -WORKDIR /app -RUN yarn set version 3.2.2 && \ - yarn install && \ - yarn workspace @1kv/common build && \ - yarn workspace @1kv/telemetry build -CMD yarn start:dev:telemetry diff --git a/packages/telemetry/esbuild.mjs b/packages/telemetry/esbuild.mjs deleted file mode 100644 index e610f3526..000000000 --- a/packages/telemetry/esbuild.mjs +++ /dev/null @@ -1,85 +0,0 @@ -import esbuild from "esbuild"; - -const externalPackages = [ - "@polkadot/api-augment", - "velocityjs", - "dustjs-linkedin", - "atpl", - "liquor", - "twig", - "eco", - "jazz", - "jqtpl", - "hamljs", - "hamlet", - "whiskers", - "haml-coffee", - "hogan.js", - "templayed", - "underscore", - "walrus", - "mustache", - "just", - "ect", - "mote", - "toffee", - "dot", - "bracket-template", - "ractive", - "htmling", - "babel-core", - "plates", - "vash", - "slm", - "marko", - "teacup/lib/express", - "coffee-script", - "squirrelly", - "twing", - "matris-js-sdk", - "@1kv/telemetry", - "@1kv/gateway", -]; - -const isProduction = process.argv.includes("--prod"); - -const buildOptions = { - entryPoints: ["src/index.ts"], - bundle: true, - minify: isProduction, - platform: "node", - target: "node18", - external: externalPackages, - outdir: "build", - tsconfig: "tsconfig.json", - splitting: true, - format: "esm", - chunkNames: "chunks/[name]-[hash]", - sourcemap: !isProduction, - logLevel: "error", -}; - -if (process.argv.includes("--watch")) { - buildOptions.watch = { - onRebuild(error, result) { - if (error) console.error("watch build failed:", error); - else - console.log( - "watch build succeeded at", - new Date().toLocaleTimeString(), - ); - }, - }; - console.log("watch mode enabled"); -} - -if (isProduction) { - buildOptions.define = { - "process.env.NODE_ENV": "'production'", - }; -} - -esbuild.build(buildOptions).catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index aa8dd4a59..08bb52be4 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -1,18 +1,13 @@ { "name": "@1kv/telemetry", - "version": "3.3.0", + "version": "3.3.1", "description": "Services for running the Thousand Validator Program.", "main": "build/index.js", "types": "build/index.d.ts", "scripts": { "build": "tsc --build tsconfig.json", - "build:prod": "node esbuild.mjs --prod", "clean": "../../node_modules/.bin/rimraf ./build tsconfig.tsbuildinfo combined.log", "clean:build": "yarn clean && yarn build", - "create-config-kusama-microservice": "cp config/kusama.sample.json ./config/main.json", - "create-config-kusama-microservice-dev": "cp config/kusama.sample.json ./config/main.json", - "create-config-polkadot-microservice": "cp config/polkadot.sample.json ./config/main.json", - "create-config-polkadot-microservice-dev": "cp config/polkadot.sample.json ./config/main.json", "docker": "docker-compose rm -f; docker-compose build --no-cache; docker-compose up -d", "lint": "tsc --noEmit && eslint 'src/**/*.{js,ts,tsx}' --quiet", "lint:fix": "tsc --noEmit && eslint 'src/**/*.{js,ts,tsx}' --quiet --fix", @@ -20,10 +15,13 @@ "start:watch": "NODE_OPTIONS='--max-old-space-size=6096' nodemon --watch build --exec node build/run.js", "start:dev": "concurrently \"tsc -w\" \"yarn start:watch\"", "js:start": "NODE_OPTIONS='--max-old-space-size=6096' node build/run.js start", - "test": "SKIP_MD5=true LOG_LEVEL=info ../../node_modules/.bin/vitest --config vitest.int.config.mts --no-file-parallelism", - "test:int": "SKIP_MD5=true LOG_LEVEL=info ../../node_modules/.bin/vitest --config vitest.int.config.mts --no-file-parallelism", - "test:int:silent": "SKIP_MD5=true LOG_LEVEL=warn ../../node_modules/.bin/vitest --config vitest.int.config.mts --no-file-parallelism" + "test": "SKIP_MD5=true LOG_LEVEL=info ../../node_modules/.bin/vitest --config vitest.int.config.mts --run --no-file-parallelism", + "test:int": "SKIP_MD5=true LOG_LEVEL=info ../../node_modules/.bin/vitest --config vitest.int.config.mts --run --no-file-parallelism", + "test:int:silent": "SKIP_MD5=true LOG_LEVEL=warn ../../node_modules/.bin/vitest --config vitest.int.config.mts --run --no-file-parallelism" }, "author": "Web3 Foundation ", - "license": "GPL-3.0" + "license": "GPL-3.0", + "dependencies": { + "@1kv/common": "*" + } } diff --git a/packages/telemetry/src/run.ts b/packages/telemetry/src/run.ts deleted file mode 100644 index a4f5def90..000000000 --- a/packages/telemetry/src/run.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Config, Db, logger } from "@1kv/common"; -import { Command } from "commander"; -import path from "path"; -import { Server } from "@1kv/gateway"; -import TelemetryClient from "./Telemetry/Telemetry"; - -const version = "v2.6.87"; - -export const telemetryLabel = { label: "Telemetry" }; - -const catchAndQuit = async (fn: any) => { - try { - await fn; - } catch (e) { - console.error(e); - process.exit(1); - } -}; - -export const createServer = async (config) => { - try { - logger.info(`Creating Server`, telemetryLabel); - const server = new Server(config); - await server.start(); - } catch (e) { - logger.error(JSON.stringify(e)); - process.exit(1); - } -}; -const start = async (cmd: { config: string }) => { - const config = Config.loadConfig(path.join(cmd.config, "main.json")); - await createServer(config); - - logger.info(`Starting the backend services: ${version}`, telemetryLabel); - - const db = await Db.create(config.db.mongo.uri); - const telemetry = new TelemetryClient(config); - await telemetry.start(); -}; - -const program = new Command(); - -if (require.main === module) { - program - .option( - "--config ", - "The path to the config directory.", - "config", - ) - .action((cmd: { config: string }) => catchAndQuit(start(cmd))); - - program.version(version); - program.parse(process.argv); -} diff --git a/packages/telemetry/tsconfig.json b/packages/telemetry/tsconfig.json index 028391696..f0798cf42 100644 --- a/packages/telemetry/tsconfig.json +++ b/packages/telemetry/tsconfig.json @@ -4,7 +4,6 @@ "include": ["src/**/*.ts"], "files": [ - "src/run.ts", "src/index.ts", ], "compilerOptions": { diff --git a/packages/worker/.dockerignore b/packages/worker/.dockerignore deleted file mode 100644 index 3ced431fe..000000000 --- a/packages/worker/.dockerignore +++ /dev/null @@ -1,5 +0,0 @@ -* -!package.json -!tsconfig.json -!src -!config diff --git a/packages/worker/.eslintrc.js b/packages/worker/.eslintrc.js deleted file mode 100644 index fb9c98819..000000000 --- a/packages/worker/.eslintrc.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - parser: "@typescript-eslint/parser", // Specifies the ESLint parser - extends: [ - "plugin:@typescript-eslint/recommended", // Uses the recommended rules from the @typescript-eslint/eslint-plugin - "plugin:security/recommended", - "prettier", // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier - "plugin:prettier/recommended" // Enables eslint-plugin-prettier and eslint-config-prettier. This will display prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. - ], - parserOptions: { - ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features - sourceType: "module" // Allows for the use of imports - }, - rules: { - "@typescript-eslint/ban-ts-comment": "off" - } -}; diff --git a/packages/worker/Dockerfile b/packages/worker/Dockerfile deleted file mode 100644 index 8fd6d5bed..000000000 --- a/packages/worker/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM node:17-slim -ARG MATRIX_TOKEN -WORKDIR /code -COPY . . -RUN ["npm", "i"] -RUN ["npm", "run", "build"] -CMD ["npm", "run", "js:start"] diff --git a/packages/worker/Dockerfile-dev b/packages/worker/Dockerfile-dev deleted file mode 100644 index 33b50a4a7..000000000 --- a/packages/worker/Dockerfile-dev +++ /dev/null @@ -1,8 +0,0 @@ -FROM node:18 AS builder -COPY . /app -WORKDIR /app -RUN yarn set version 3.2.2 && \ - yarn install && \ - yarn workspace @1kv/common build && \ - yarn workspace @1kv/gateway build -CMD yarn start:dev:gateway diff --git a/packages/worker/config/kusama.sample.json b/packages/worker/config/kusama.sample.json deleted file mode 100644 index f48623a57..000000000 --- a/packages/worker/config/kusama.sample.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "global": { - "apiEndpoints": [ - "wss://kusama-rpc.polkadot.io", - "wss://kusama-rpc.dwellir.com", - "wss://kusama.public.curie.radiumblock.xyz/ws" - ] - }, - "db": { - "mongo": { - "uri": "mongodb://mongo:27017" - } - }, - "server": { - "onlyHealth": true, - "port": 3303 - }, - "score": { - "inclusion": "200", - "spanInclusion": "200", - "discovered": "5", - "nominated": "30", - "rank": "5", - "bonded": "50", - "faults": "5", - "offline": "2", - "location": "40", - "region": "10", - "country": "10", - "provider": "100", - "nominations": "100", - "delegations": "60", - "openGov": "100", - "openGovDelegation": "100", - "rpc": "100", - "client": "100", - "useInclusion": true, - "useSpanInclusion": true, - "useDiscovered": true, - "useNominated": true, - "useRank": true, - "useBonded": true, - "useFaults": true, - "useOffline": true, - "useLocation": true, - "useRegion": true, - "useCountry": true, - "useProvider": true, - "useNominations": true, - "useDelegations": true, - "useOpenGov": true, - "useOpenGovDelegation": true, - "useRpc": true, - "useClient": true - }, - "redis": { - "enable": true, - "host": "redis", - "port": 6379 - } -} diff --git a/packages/worker/config/polkadot.sample.json b/packages/worker/config/polkadot.sample.json deleted file mode 100644 index 862534925..000000000 --- a/packages/worker/config/polkadot.sample.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "global": { - "apiEndpoints": [ - "wss://kusama-rpc.polkadot.io" - ] - }, - "db": { - "mongo": { - "uri": "mongodb://mongo:27017" - }, - }, - "server": { - "onlyHealth": true, - "port": 3303 - }, - "score": { - "inclusion": "200", - "spanInclusion": "200", - "discovered": "5", - "nominated": "30", - "rank": "5", - "bonded": "50", - "faults": "5", - "offline": "2", - "location": "40", - "region": "10", - "country": "10", - "provider": "100", - "nominations": "100", - "delegations": "60", - "openGov": "100", - "openGovDelegation": "100", - "rpc": "100", - "client": "100", - "useInclusion": true, - "useSpanInclusion": true, - "useDiscovered": true, - "useNominated": true, - "useRank": true, - "useBonded": true, - "useFaults": true, - "useOffline": true, - "useLocation": true, - "useRegion": true, - "useCountry": true, - "useProvider": true, - "useNominations": true, - "useDelegations": true, - "useOpenGov": true, - "useOpenGovDelegation": true, - "useRpc": true, - "useClient": true - }, - "redis": { - "enable": true, - "host": "redis", - "port": 6379 - } -} diff --git a/packages/worker/esbuild.js b/packages/worker/esbuild.js deleted file mode 100644 index 1b57f9983..000000000 --- a/packages/worker/esbuild.js +++ /dev/null @@ -1,85 +0,0 @@ -const esbuild = require("esbuild"); - -const externalPackages = [ - "@polkadot/api-augment", - "velocityjs", - "dustjs-linkedin", - "atpl", - "liquor", - "twig", - "eco", - "jazz", - "jqtpl", - "hamljs", - "hamlet", - "whiskers", - "haml-coffee", - "hogan.js", - "templayed", - "underscore", - "walrus", - "mustache", - "just", - "ect", - "mote", - "toffee", - "dot", - "bracket-template", - "ractive", - "htmling", - "babel-core", - "plates", - "vash", - "slm", - "marko", - "teacup/lib/express", - "coffee-script", - "squirrelly", - "twing", - "matris-js-sdk", - "@1kv/telemetry", - "@1kv/gateway", -]; - -const isProduction = process.argv.includes("--prod"); - -const buildOptions = { - entryPoints: ["src/index.ts"], - bundle: true, - minify: isProduction, - platform: "node", - target: "node18", - external: externalPackages, - outdir: "build", - tsconfig: "tsconfig.json", - splitting: true, - format: "esm", - chunkNames: "chunks/[name]-[hash]", - sourcemap: !isProduction, - logLevel: "info", -}; - -if (process.argv.includes("--watch")) { - buildOptions.watch = { - onRebuild(error, result) { - if (error) console.error("watch build failed:", error); - else - console.log( - "watch build succeeded at", - new Date().toLocaleTimeString(), - ); - }, - }; - console.log("watch mode enabled"); -} - -if (isProduction) { - buildOptions.define = { - "process.env.NODE_ENV": "'production'", - }; -} - -esbuild.build(buildOptions).catch((error) => { - console.error(error); - process.exit(1); -}); diff --git a/packages/worker/package.json b/packages/worker/package.json deleted file mode 100644 index f4f9c808a..000000000 --- a/packages/worker/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@1kv/worker", - "version": "3.3.0", - "description": "Services for running the Thousand Validator Program.", - "main": "build/index.js", - "types": "build/index.d.ts", - "scripts": { - "build": "tsc --build tsconfig.json", - "build:prod": "node esbuild.js --prod", - "clean": "../../node_modules/.bin/rimraf ./build tsconfig.tsbuildinfo combined.log", - "clean:build": "yarn clean && yarn build", - "create-config-kusama-microservice": "cp config/kusama.sample.json ./config/main.json", - "create-config-kusama-microservice-dev": "cp config/kusama.sample.json ./config/main.json", - "create-config-polkadot-microservice": "cp config/polkadot.sample.json ./config/main.json", - "create-config-polkadot-microservice-dev": "cp config/polkadot.sample.json ./config/main.json", - "docker": "docker-compose rm -f; docker-compose build --no-cache; docker-compose up -d", - "lint": "tsc --noEmit && eslint 'src/**/*.{js,ts,tsx}' --quiet", - "lint:fix": "tsc --noEmit && eslint 'src/**/*.{js,ts,tsx}' --quiet --fix", - "start": "NODE_OPTIONS='--max-old-space-size=14096' ts-node src/run.ts start", - "start:watch": "NODE_OPTIONS='--max-old-space-size=16096' nodemon --watch build --exec node build/run.js", - "start:dev": "concurrently \"tsc -w\" \"yarn start:watch\"", - "js:start": "NODE_OPTIONS='--max-old-space-size=6096' node build/run.js start" - }, - "author": "Web3 Foundation ", - "license": "GPL-3.0", - "config": { - "mongodbMemoryServer": { - "debug": "on" - } - } -} diff --git a/packages/worker/prettierrc.js b/packages/worker/prettierrc.js deleted file mode 100644 index aed7d4a6d..000000000 --- a/packages/worker/prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - semi: true, - trailingComma: "all", - singleQuote: true, - printWidth: 120, - tabWidth: 2, -}; diff --git a/packages/worker/src/index.ts b/packages/worker/src/index.ts deleted file mode 100644 index 488dd3f6f..000000000 --- a/packages/worker/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as worker from "./worker"; -import * as queues from "./queues"; -import * as workers from "./workers"; - -export const otvWorker = { worker, queues, workers }; diff --git a/packages/worker/src/queues/BlockQueue.ts b/packages/worker/src/queues/BlockQueue.ts deleted file mode 100644 index 37030e49c..000000000 --- a/packages/worker/src/queues/BlockQueue.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Queue } from "bullmq"; -import { ChainData, logger, queries } from "@1kv/common"; - -const label = { label: "BlockQueue" }; - -export const createBlockQueue = async (host, port) => { - const queue = new Queue("block", { - connection: { - host: host, - port: port, - }, - }); - return queue; -}; - -// Add new blocks to the queue -export const addAllBlocks = async (queue: Queue, chaindata: ChainData) => { - // Get the latest block from the chain - const latestBlock = await chaindata.getLatestBlock(); - - // get the indices of the earliest and latest blocks in the database - const blockIndex = await queries.getBlockIndex(); - const latest = blockIndex?.latest || latestBlock; - const earliest = blockIndex?.earliest || latestBlock; - - // If there is no block index in the database, add the latest block to the queue and set the block index to the latest block - if (!blockIndex) { - await addBlockJob(queue, latestBlock); - await queries.setBlockIndex(latestBlock, latestBlock); - } - - const threshold = 500000; - - // If the current chain block is higher than what is in the db, add all the blocks from the current one until the most recent indexed one to the queue - if (blockIndex?.latest && latestBlock > blockIndex.latest) { - logger.info( - `latest block: ${latestBlock} db block: ${blockIndex.latest}, adding ${ - latestBlock - blockIndex.latest - } blocks to queue`, - label, - ); - for (let i = blockIndex.latest + 1; i < latestBlock; i++) { - await addBlockJob(queue, i); - } - } - - if (earliest) { - const targetEarliest = earliest - threshold > 0 ? earliest - threshold : 0; - logger.info( - `earliest ${earliest} target earliest: ${targetEarliest}, adding ${ - earliest - targetEarliest - } to the queue`, - label, - ); - for (let i = earliest; i > targetEarliest; i--) { - await addBlockJob(queue, i); - } - } -}; - -export const addBlockJob = async (queue: Queue, blockNumber: number) => { - await queue.add( - "block", - { blockNumber: blockNumber }, - { - jobId: `block${blockNumber}`, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; diff --git a/packages/worker/src/queues/ChainDataQueue.ts b/packages/worker/src/queues/ChainDataQueue.ts deleted file mode 100644 index 35162227d..000000000 --- a/packages/worker/src/queues/ChainDataQueue.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { Queue } from "bullmq"; -import { Jobs, logger, queries } from "@1kv/common"; - -const label = { label: "ChainDataQueue" }; - -export const createChainDataQueue = async (host, port) => { - const queue = await new Queue("chaindata", { - connection: { - host: host, - port: port, - }, - }); - return queue; -}; - -export const addActiveValidatorJob = async (queue: Queue, repeat: number) => { - logger.info(`adding Active Validator Job to Queue.....`, label); - await queue.add( - "chaindata", - { jobType: Jobs.ACTIVE_VALIDATOR_JOB }, - { - repeat: { - every: repeat, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; - -export const addEraPointsJob = async (queue: Queue, repeat: number) => { - logger.info(`adding Era Points Job to Queue.....`); - await queue.add( - "chaindata", - { jobType: Jobs.ERA_POINTS_JOB }, - { - repeat: { - every: repeat, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; - -export const addEraStatsJob = async (queue: Queue, repeat: number) => { - logger.info(`adding Era Stats Job to Queue.....`); - await queue.add( - "chaindata", - { jobType: Jobs.ERA_STATS_JOB }, - { - repeat: { - every: repeat, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; - -export const addInclusionJob = async (queue: Queue, repeat: number) => { - logger.info(`adding Inclusion Job to Queue.....`); - await queue.add( - "chaindata", - { jobType: Jobs.INCLUSION_JOB }, - { - repeat: { - every: repeat, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; - -export const addNominatorJob = async (queue: Queue, repeat: number) => { - logger.info(`adding Nominator Job to Queue.....`); - await queue.add( - "chaindata", - { jobType: Jobs.NOMINATOR_JOB }, - { - repeat: { - every: repeat, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; - -export const addSessionKeyJob = async (queue: Queue, repeat: number) => { - logger.info(`adding Session Key Job to Queue.....`); - await queue.add( - "chaindata", - { jobType: Jobs.SESSION_KEY_JOB }, - { - repeat: { - every: repeat, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; - -// Adds a single job to the queue that processes all validators -export const addValidatorPrefJobAll = async (queue: Queue, repeat: number) => { - await queue.add( - "chaindata", - { jobType: Jobs.VALIDATOR_PREF_JOB }, - { - repeat: { - every: repeat, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; - -export const addValidatorPrefJob = async (queue: Queue, repeat: number) => { - logger.info(`adding Validator Pref Job to Queue.....`); - const candidates = await queries.allCandidates(); - for (const [index, candidate] of candidates.entries()) { - await queue.add( - "chaindata", - { jobType: Jobs.VALIDATOR_PREF_JOB, candidateAddress: candidate.stash }, - { - repeat: { - every: repeat + index, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); - } -}; diff --git a/packages/worker/src/queues/ContraintsQueue.ts b/packages/worker/src/queues/ContraintsQueue.ts deleted file mode 100644 index 1b9488f94..000000000 --- a/packages/worker/src/queues/ContraintsQueue.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Queue } from "bullmq"; -import { logger } from "@1kv/common"; - -const constraintsLabel = { label: "ConstraintsQueue" }; - -export const createConstraintsQueue = async (host, port) => { - const queue = await new Queue("constraints", { - connection: { - host: host, - port: port, - }, - }); - return queue; -}; - -export const addValidityJob = async (queue: Queue, repeat: number) => { - logger.info(`adding Validity Job to Queue.....`, constraintsLabel); - // const candidates = await queries.allCandidates(); - // for (const [index, candidate] of candidates.entries()) { - await queue.add( - "constraints", - { - jobType: "validityJob", - }, - { - repeat: { - every: repeat, - // limit: 1000, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); - // } -}; - -export const addScoreJob = async (queue: Queue, repeat: number) => { - // const candidates = await queries.allCandidates(); - // logger.info(`adding ${candidates.length} to be scored...`); - // for (const [index, candidate] of candidates.entries()) { - await queue.add( - "constraints", - { jobType: "scoreJob" }, - { - repeat: { - every: repeat, - // limit: 100, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); - // } - logger.info(`adding Score Job to Queue.....`, constraintsLabel); -}; diff --git a/packages/worker/src/queues/ReleaseMonitorQueue.ts b/packages/worker/src/queues/ReleaseMonitorQueue.ts deleted file mode 100644 index c6f775c72..000000000 --- a/packages/worker/src/queues/ReleaseMonitorQueue.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Queue } from "bullmq"; - -export const createReleaseMonitorQueue = async (host, port) => { - const queue = await new Queue("releaseMonitor", { - connection: { - host: host, - port: port, - }, - }); - return queue; -}; - -export const addReleaseMonitorJob = async (queue: Queue, repeat: number) => { - await queue.add( - "releaseMonitor", - {}, - { - repeat: { - every: repeat, - limit: 100, - }, - attempts: 10, - backoff: { - type: "exponential", - delay: 1000, - }, - }, - ); -}; diff --git a/packages/worker/src/queues/index.ts b/packages/worker/src/queues/index.ts deleted file mode 100644 index 4c437215c..000000000 --- a/packages/worker/src/queues/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { logger } from "@1kv/common"; - -export * from "./ReleaseMonitorQueue"; -export * from "./ContraintsQueue"; -export * from "./ChainDataQueue"; -export * from "./BlockQueue"; -import { Queue } from "bullmq"; - -export const removeRepeatableJobsFromQueues = async (queues: Queue[]) => { - logger.info("Removing repeatable jobs", { label: "Queue" }); - for (const queue of queues) { - try { - await removeRepeatableJobs(queue); - } catch (e) { - logger.error(JSON.stringify(e)); - } - } -}; - -export const removeRepeatableJobs = async (queue: Queue) => { - const repeatableJobs = await queue.getRepeatableJobs(); - repeatableJobs.forEach((job) => { - try { - queue.removeRepeatableByKey(job.key); - } catch (e) { - logger.error(JSON.stringify(e)); - } - }); -}; - -export const drainQueues = async (queues: Queue[]) => { - logger.info("Draining queues", { label: "Queue" }); - for (const queue of queues) { - try { - await drainQueue(queue); - } catch (e) { - logger.error(JSON.stringify(e)); - } - } -}; - -export const drainQueue = async (queue: Queue) => { - await queue.drain(); -}; - -export const obliterateQueues = async (queues: Queue[]) => { - logger.info("Obliterating queues", { label: "Queue" }); - for (const queue of queues) { - try { - await obliterateQueue(queue); - } catch (e) { - logger.error(JSON.stringify(e)); - } - } -}; - -export const obliterateQueue = async (queue: Queue) => { - await queue.obliterate(); -}; diff --git a/packages/worker/src/run.ts b/packages/worker/src/run.ts deleted file mode 100644 index 5e4576da5..000000000 --- a/packages/worker/src/run.ts +++ /dev/null @@ -1,62 +0,0 @@ -import Worker from "./worker"; -import { Command } from "commander"; -import { Config, Db, logger } from "@1kv/common"; -import path from "path"; -import { Server } from "@1kv/gateway"; - -const version = process.env.npm_package_version; - -const catchAndQuit = async (fn: any) => { - try { - await fn; - } catch (e) { - logger.info("There was an error!"); - logger.error(JSON.stringify(e)); - process.exit(1); - } -}; -export const createServer = async (config) => { - try { - logger.info(`Creating Server`, { label: "Worker" }); - const server = new Server(config); - await server.start(); - } catch (e) { - logger.error(JSON.stringify(e)); - process.exit(1); - } -}; -const start = async (cmd: { config: string }) => { - const config = Config.loadConfig(path.join(cmd.config, "main.json")); - await createServer(config); - - logger.info(`Starting the backend services. ${version}`, { - label: "Worker", - }); - const db = await Db.create(config.db.mongo.uri); - const worker = new Worker(config); - await worker.startWorker(); -}; - -const program = new Command(); - -if (require.main === module) { - program - .option( - "--config ", - "The path to the config directory.", - "config", - ) - .action((cmd: { config: string }) => catchAndQuit(start(cmd))); - - program.version(version); - program.parse(process.argv); -} - -process - .on("unhandledRejection", (reason, p) => { - console.error(reason, "Unhandled Rejection at Promise", p); - }) - .on("uncaughtException", (err) => { - console.error(err, "Uncaught Exception thrown"); - process.exit(1); - }); diff --git a/packages/worker/src/worker.ts b/packages/worker/src/worker.ts deleted file mode 100644 index 03dc7650d..000000000 --- a/packages/worker/src/worker.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { ApiHandler, Config, Constraints, logger } from "@1kv/common"; - -export const workerLabel = { label: "Worker" }; - -class Worker { - private api: ApiHandler; - private apiEndpoints: string[]; - private config: Config.ConfigSchema; - private host: string; - private port: number; - private constraints: Constraints.OTV; - - constructor(config: Config.ConfigSchema) { - this.config = config; - this.apiEndpoints = this.config.global.apiEndpoints; - this.host = this.config.redis.host; - this.port = this.config.redis.port; - logger.info(`Redis host: ${this.host} port: ${this.port}`, workerLabel); - } - - async initializeAPI(): Promise { - const endpoints = this.apiEndpoints.sort(() => Math.random() - 0.5); - logger.info(`ApiHandler connecting to ${endpoints[0]}`, workerLabel); - this.api = new ApiHandler(endpoints); - await this.api.setAPI(); - } - - async initializeConstraints(): Promise { - this.constraints = new Constraints.OTV(this.api, this.config); - } - - async startWorker(): Promise { - logger.info(`starting worker....`, workerLabel); - // await this.initializeAPI(); - // await this.initializeConstraints(); - // logger.info(`Redis host: ${this.host} port: ${this.port}`, workerLabel); - // const releaseMonitorWorker = await createReleaseMonitorWorker( - // this.host, - // this.port, - // ); - // logger.info( - // `Created release monitor worker: ${releaseMonitorWorker.id}`, - // workerLabel, - // ); - // const constraintsWorker = await createConstraintsWorker( - // this.host, - // this.port, - // this.constraints, - // ); - // logger.info( - // `Created constraints worker: ${constraintsWorker.id}`, - // workerLabel, - // ); - // const chaindataWorker = await createChainDataWorker( - // this.host, - // this.port, - // this.api, - // ); - // logger.info(`Created chaindata worker: ${chaindataWorker.id}`, workerLabel); - // const blockWorker = await createBlockWorker(this.host, this.port, this.api); - // logger.info(`Created block worker: ${blockWorker.id}`, workerLabel); - } -} - -export default Worker; diff --git a/packages/worker/src/workers/BlockWorker.ts b/packages/worker/src/workers/BlockWorker.ts deleted file mode 100644 index bd61d3fa1..000000000 --- a/packages/worker/src/workers/BlockWorker.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ApiHandler, logger } from "@1kv/common"; - -export const createBlockWorker = async (host, port, api: ApiHandler) => { - logger.info(`Creating Block Worker...`, { label: "BlockWorker" }); - // const chaindata = new ChainData(api); - // const worker = await new Worker( - // "block", - // (job) => () => { - // console.log(); - // }, //Jobs.processBlockDataJob(job, chaindata), - // { - // connection: { - // host: host, - // port: port, - // }, - // concurrency: 4, - // lockDuration: 300000, - // }, - // ); - // worker.on("completed", (job, result) => { - // // job has completed - // const blockNumber = job.data.blockNumber; - // const executionTime = result; - // // logger.info(`Indexed block #${blockNumber} (${executionTime}s)`, { - // // label: "BlockWorker", - // // }); - // }); - // return worker; -}; diff --git a/packages/worker/src/workers/ChainDataWorker.ts b/packages/worker/src/workers/ChainDataWorker.ts deleted file mode 100644 index 846ae584e..000000000 --- a/packages/worker/src/workers/ChainDataWorker.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ApiHandler, ChainData, logger } from "@1kv/common"; - -export const createChainDataWorker = async (host, port, api: ApiHandler) => { - logger.info(`Creating constraints worker...`); - const chaindata = new ChainData(api); - // const worker = await new Worker( - // "chaindata", - // (job) => console.log(), //Jobs.processChainDataJob(job, chaindata), - // { - // connection: { - // host: host, - // port: port, - // }, - // concurrency: 6, - // lockDuration: 3000000, - // }, - // ); - // return worker; -}; diff --git a/packages/worker/src/workers/ConstraintsWorker.ts b/packages/worker/src/workers/ConstraintsWorker.ts deleted file mode 100644 index d9da81dcf..000000000 --- a/packages/worker/src/workers/ConstraintsWorker.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Constraints, logger } from "@1kv/common"; - -export const createConstraintsWorker = async ( - host, - port, - constraints: Constraints.OTV, -) => { - logger.info(`Creating constraints worker...`); - // const worker = await new Worker( - // "constraints", - // (job) => console.log(), //Jobs.processConstraintsJob(job, constraints), - // { - // connection: { - // host: host, - // port: port, - // }, - // concurrency: 10, - // lockDuration: 3000000, - // }, - // ); - // return worker; -}; diff --git a/packages/worker/src/workers/ReleaseMonitorWorker.ts b/packages/worker/src/workers/ReleaseMonitorWorker.ts deleted file mode 100644 index eae5e3bf2..000000000 --- a/packages/worker/src/workers/ReleaseMonitorWorker.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { logger } from "@1kv/common"; - -export const createReleaseMonitorWorker = async (host, port) => { - logger.info(`Creating releaseMonitor worker...`); - // const worker = await new Worker( - // "releaseMonitor", - // (job) => console.log(), //Jobs.processReleaseMonitorJob(job), - // { - // connection: { - // host: host, - // port: port, - // }, - // concurrency: 4, - // lockDuration: 300000, - // }, - // ); - // return worker; -}; diff --git a/packages/worker/src/workers/index.ts b/packages/worker/src/workers/index.ts deleted file mode 100644 index 2639012f2..000000000 --- a/packages/worker/src/workers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./ReleaseMonitorWorker"; -export * from "./ConstraintsWorker"; -export * from "./ChainDataWorker"; diff --git a/packages/worker/tsconfig.json b/packages/worker/tsconfig.json deleted file mode 100644 index 972df6aee..000000000 --- a/packages/worker/tsconfig.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "exclude": ["test", "node_modules"], - "include": ["src/**/*.ts"], - - "files": [ - "src/run.ts", - "src/index.ts", - "src/worker.ts", - ], - "compilerOptions": { - "paths": { - "@1kv/common": ["../common/build"], - "@1kv/gateway": ["../gateway/build"] - }, - /* Basic Options */ - "target": "es2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - "lib": ["ES2015", "dom"], - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "build", - "skipLibCheck": true, /* Redirect output structure to the directory. */ - "rootDir": "src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - "composite": true, /* Enable project compilation */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": false, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - - /* Source Map Options */ - // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - "resolveJsonModule": true - }, - "references": [ - { "path": "../common" }, - { "path": "../gateway" } - ] -} diff --git a/turbo.json b/turbo.json index 7220c5be8..9a12bc57c 100644 --- a/turbo.json +++ b/turbo.json @@ -1,13 +1,13 @@ { "$schema": "https://turbo.build/schema.json", - "pipeline": { + "tasks": { "build": { + "dependsOn": ["^build"], "outputs": ["build/**", "dist/**"] }, "test": { "inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx"] }, - "lint": {}, "dev": { "cache": false, diff --git a/yarn.lock b/yarn.lock index 26f2b0ccd..b14e1fe89 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,17 +12,11 @@ __metadata: "@1kv/common": "workspace:*" "@1kv/gateway": "workspace:*" "@1kv/telemetry": "workspace:*" - "@1kv/worker": "workspace:*" - "@ava/typescript": ^4.1.0 - "@babel/preset-react": ^7.23.3 - "@bull-board/api": ^5.15.1 - "@bull-board/koa": ^5.15.0 "@koa/router": ^12.0.1 "@octokit/rest": ^20.0.2 - "@polkadot/api": ^11.1.1 + "@polkadot/api": ^11.2.1 "@polkadot/keyring": ^12.6.2 "@types/cron": ^2.4.0 - "@types/jest": ^29.5.12 "@types/koa": ^2.15.0 "@types/koa-bodyparser": ^4.3.12 "@types/mongoose": ^5.11.97 @@ -34,31 +28,22 @@ __metadata: "@vitest/coverage-istanbul": ^1.3.1 "@vitest/coverage-v8": ^1.3.1 "@vitest/ui": ^1.3.1 - ava: ^6.1.2 axios: ^1.6.7 - bree: ^9.2.2 - bs58: ^5.0.0 - bullmq: ^5.4.2 chalk: 5.3.0 coingecko-api-v3: ^0.0.29 commander: ^12.0.0 concurrently: ^8.2.2 cron: ^3.1.6 - esbuild: ^0.20.1 - esbuild-node-builtins: ^0.1.0 - esbuild-plugin-node-polyfill: ^0.0.1 + date-fns: ^3.6.0 eslint: 8.42.0 eslint-config-prettier: ^8.8.0 eslint-plugin-prettier: 5.0.0 eslint-plugin-security: ^1.7.1 eventemitter3: ^5.0.1 - hash.js: ^1.1.7 - jest: ^29.7.0 koa: ^2.15.0 koa-bodyparser: ^4.4.1 koa-cash: ^4.1.1 koa-mount: ^4.0.0 - koa-send: ^5.0.1 koa-static: ^5.0.0 koa-swagger-decorator: ^1.8.7 koa2-cors: ^2.0.6 @@ -67,22 +52,15 @@ __metadata: mongodb: 6.5.0 mongodb-memory-server: ^9.1.7 mongoose: ^8.2.1 - node-fetch: 3.3.2 nodemon: ^3.1.0 open-cli: ^8.0.0 prettier: ^3.2.4 - reconnecting-websocket: ^4.4.0 - request: ^2.88.2 semver: ^7.6.0 swagger-jsdoc: ^6.2.8 swagger2: ^4.0.3 swagger2-koa: ^4.0.0 - ts-jest: ^29.1.2 ts-node: ^10.9.2 - turbo: ^1.12.5 - turborepo: ^0.0.1 - typedoc: ^0.25.12 - typedoc-plugin-markdown: ^3.17.1 + turbo: v2.0.3 typescript: ^5.3.3 vite: ^5.1.6 vite-plugin-dts: ^3.7.3 @@ -95,7 +73,7 @@ __metadata: languageName: unknown linkType: soft -"@1kv/common@workspace:*, @1kv/common@workspace:packages/common": +"@1kv/common@*, @1kv/common@workspace:*, @1kv/common@workspace:packages/common": version: 0.0.0-use.local resolution: "@1kv/common@workspace:packages/common" languageName: unknown @@ -104,12 +82,16 @@ __metadata: "@1kv/core@workspace:packages/core": version: 0.0.0-use.local resolution: "@1kv/core@workspace:packages/core" + dependencies: + "@1kv/common": "*" languageName: unknown linkType: soft "@1kv/gateway@workspace:*, @1kv/gateway@workspace:packages/gateway": version: 0.0.0-use.local resolution: "@1kv/gateway@workspace:packages/gateway" + dependencies: + "@1kv/common": "*" languageName: unknown linkType: soft @@ -146,12 +128,8 @@ __metadata: "@1kv/telemetry@workspace:*, @1kv/telemetry@workspace:packages/telemetry": version: 0.0.0-use.local resolution: "@1kv/telemetry@workspace:packages/telemetry" - languageName: unknown - linkType: soft - -"@1kv/worker@workspace:*, @1kv/worker@workspace:packages/worker": - version: 0.0.0-use.local - resolution: "@1kv/worker@workspace:packages/worker" + dependencies: + "@1kv/common": "*" languageName: unknown linkType: soft @@ -224,17 +202,7 @@ __metadata: languageName: node linkType: hard -"@ava/typescript@npm:^4.1.0": - version: 4.1.0 - resolution: "@ava/typescript@npm:4.1.0" - dependencies: - escape-string-regexp: ^5.0.0 - execa: ^7.1.1 - checksum: b0e0aa2a5d3bc8514dea73a2f8884bc6011c98d28e9f476dbfbdbab679f4ac17ac0d4ecb01ca9a6d6553db81a0e7786584625ec11cbd0b4e2743844470742160 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.23.5": version: 7.23.5 resolution: "@babel/code-frame@npm:7.23.5" dependencies: @@ -251,7 +219,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.5, @babel/core@npm:^7.23.9": +"@babel/core@npm:^7.23.5, @babel/core@npm:^7.23.9": version: 7.23.9 resolution: "@babel/core@npm:7.23.9" dependencies: @@ -274,7 +242,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.23.6, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.23.6": version: 7.23.6 resolution: "@babel/generator@npm:7.23.6" dependencies: @@ -286,15 +254,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d - languageName: node - linkType: hard - "@babel/helper-compilation-targets@npm:^7.23.6": version: 7.23.6 resolution: "@babel/helper-compilation-targets@npm:7.23.6" @@ -358,7 +317,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-plugin-utils@npm:7.22.5" checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 @@ -397,7 +356,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5": +"@babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e @@ -426,7 +385,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9": version: 7.23.9 resolution: "@babel/parser@npm:7.23.9" bin: @@ -444,182 +403,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.8.3": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.23.3 - resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 89037694314a74e7f0e7a9c8d3793af5bf6b23d80950c29b360db1c66859d67f60711ea437e70ad6b5b4b29affe17eababda841b6c01107c2b638e0493bafb4e - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.8.3": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.23.3 - resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: abfad3a19290d258b028e285a1f34c9b8a0cbe46ef79eafed4ed7ffce11b5d0720b5e536c82f91cbd8442cde35a3dd8e861fa70366d87ff06fdc0d4756e30876 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-display-name@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-react-display-name@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7f86964e8434d3ddbd3c81d2690c9b66dbf1cd8bd9512e2e24500e9fa8cf378bc52c0853270b3b82143aba5965aec04721df7abdb768f952b44f5c6e0b198779 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-development@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5" - dependencies: - "@babel/plugin-transform-react-jsx": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 36bc3ff0b96bb0ef4723070a50cfdf2e72cfd903a59eba448f9fe92fea47574d6f22efd99364413719e1f3fb3c51b6c9b2990b87af088f8486a84b2a5f9e4560 - languageName: node - linkType: hard - "@babel/plugin-transform-react-jsx-self@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.23.3" @@ -642,50 +425,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.22.15, @babel/plugin-transform-react-jsx@npm:^7.22.5": - version: 7.23.4 - resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-module-imports": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-jsx": ^7.23.3 - "@babel/types": ^7.23.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d8b8c52e8e22e833bf77c8d1a53b0a57d1fd52ba9596a319d572de79446a8ed9d95521035bc1175c1589d1a6a34600d2e678fa81d81bac8fac121137097f1f0a - languageName: node - linkType: hard - -"@babel/plugin-transform-react-pure-annotations@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.23.3" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9ea3698b1d422561d93c0187ac1ed8f2367e4250b10e259785ead5aa643c265830fd0f4cf5087a5bedbc4007444c06da2f2006686613220acf0949895f453666 - languageName: node - linkType: hard - -"@babel/preset-react@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/preset-react@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-validator-option": ^7.22.15 - "@babel/plugin-transform-react-display-name": ^7.23.3 - "@babel/plugin-transform-react-jsx": ^7.22.15 - "@babel/plugin-transform-react-jsx-development": ^7.22.5 - "@babel/plugin-transform-react-pure-annotations": ^7.23.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2d90961e7e627a74b44551e88ad36a440579e283e8dc27972bf2f50682152bbc77228673a3ea22c0e0d005b70cbc487eccd64897c5e5e0384e5ce18f300b21eb - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.10.5, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": version: 7.23.9 resolution: "@babel/runtime@npm:7.23.9" dependencies: @@ -694,7 +434,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9": version: 7.23.9 resolution: "@babel/template@npm:7.23.9" dependencies: @@ -723,7 +463,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.8.3": version: 7.23.9 resolution: "@babel/types@npm:7.23.9" dependencies: @@ -734,17 +474,6 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.23.4": - version: 7.24.0 - resolution: "@babel/types@npm:7.24.0" - dependencies: - "@babel/helper-string-parser": ^7.23.4 - "@babel/helper-validator-identifier": ^7.22.20 - to-fast-properties: ^2.0.0 - checksum: 4b574a37d490f621470ff36a5afaac6deca5546edcb9b5e316d39acbb20998e9c2be42f3fc0bf2b55906fc49ff2a5a6a097e8f5a726ee3f708a0b0ca93aed807 - languageName: node - linkType: hard - "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -752,60 +481,6 @@ __metadata: languageName: node linkType: hard -"@breejs/later@npm:^4.1.0": - version: 4.2.0 - resolution: "@breejs/later@npm:4.2.0" - checksum: 841c25b295e157e19b8fa027ddacd0b246fd35cce79c26d9c79edf2939d55bee43df9fdca7a32bd20b237d69cfed13a9eecac084956a0802b90aaf96b9300ada - languageName: node - linkType: hard - -"@bull-board/api@npm:5.15.0": - version: 5.15.0 - resolution: "@bull-board/api@npm:5.15.0" - dependencies: - redis-info: ^3.0.8 - peerDependencies: - "@bull-board/ui": 5.15.0 - checksum: 764e6f31a5b42c924b03c818c594120c6b455df650262c0bc814b40c3bcc73be28a158c9936b9323c30c82e0c6191dd98371f2d26878cc2108847fec3cb93ee5 - languageName: node - linkType: hard - -"@bull-board/api@npm:^5.15.1": - version: 5.15.1 - resolution: "@bull-board/api@npm:5.15.1" - dependencies: - redis-info: ^3.0.8 - peerDependencies: - "@bull-board/ui": 5.15.1 - checksum: fbbcdcc7d709ccbacef5485aa440fe6c28bfb348b827c2f506430857436865afb3371b79d73ce86629ecbd83840cbc6895867df66f09e8f7ea668c9f63753e26 - languageName: node - linkType: hard - -"@bull-board/koa@npm:^5.15.0": - version: 5.15.0 - resolution: "@bull-board/koa@npm:5.15.0" - dependencies: - "@bull-board/api": 5.15.0 - "@bull-board/ui": 5.15.0 - ejs: ^3.1.7 - koa: ^2.13.1 - koa-mount: ^4.0.0 - koa-router: ^10.0.0 - koa-static: ^5.0.0 - koa-views: ^7.0.1 - checksum: 2c58c534b6868b813ed8386d0ab0c637859a8ff42f63d5c6ea442c4b88f45c8a553056ff9dac21ad4a20aebe89eac56dd6a13f2a8503744fcdffc4148391cffe - languageName: node - linkType: hard - -"@bull-board/ui@npm:5.15.0": - version: 5.15.0 - resolution: "@bull-board/ui@npm:5.15.0" - dependencies: - "@bull-board/api": 5.15.0 - checksum: 54fd367d07b0c4001e2ebc6835354cd7e9ecbf3c49389d383b74cf03074906024fa87c3226f5a62aa7038b9bf0f6630e4ebaa22a0e8ab6e36b8787fd6e947e12 - languageName: node - linkType: hard - "@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": version: 1.6.0 resolution: "@colors/colors@npm:1.6.0" @@ -989,13 +664,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/aix-ppc64@npm:0.20.1" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/android-arm64@npm:0.19.12" @@ -1003,13 +671,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-arm64@npm:0.20.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/android-arm@npm:0.19.12" @@ -1017,13 +678,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-arm@npm:0.20.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-x64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/android-x64@npm:0.19.12" @@ -1031,13 +685,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-x64@npm:0.20.1" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "@esbuild/darwin-arm64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/darwin-arm64@npm:0.19.12" @@ -1045,13 +692,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/darwin-arm64@npm:0.20.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/darwin-x64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/darwin-x64@npm:0.19.12" @@ -1059,13 +699,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/darwin-x64@npm:0.20.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@esbuild/freebsd-arm64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/freebsd-arm64@npm:0.19.12" @@ -1073,13 +706,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/freebsd-arm64@npm:0.20.1" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/freebsd-x64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/freebsd-x64@npm:0.19.12" @@ -1087,13 +713,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/freebsd-x64@npm:0.20.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/linux-arm64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-arm64@npm:0.19.12" @@ -1101,13 +720,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-arm64@npm:0.20.1" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/linux-arm@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-arm@npm:0.19.12" @@ -1115,13 +727,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-arm@npm:0.20.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@esbuild/linux-ia32@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-ia32@npm:0.19.12" @@ -1129,13 +734,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-ia32@npm:0.20.1" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-loong64@npm:0.19.12" @@ -1143,13 +741,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-loong64@npm:0.20.1" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-mips64el@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-mips64el@npm:0.19.12" @@ -1157,13 +748,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-mips64el@npm:0.20.1" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "@esbuild/linux-ppc64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-ppc64@npm:0.19.12" @@ -1171,13 +755,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-ppc64@npm:0.20.1" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/linux-riscv64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-riscv64@npm:0.19.12" @@ -1185,13 +762,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-riscv64@npm:0.20.1" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "@esbuild/linux-s390x@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-s390x@npm:0.19.12" @@ -1199,13 +769,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-s390x@npm:0.20.1" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "@esbuild/linux-x64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/linux-x64@npm:0.19.12" @@ -1213,13 +776,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-x64@npm:0.20.1" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@esbuild/netbsd-x64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/netbsd-x64@npm:0.19.12" @@ -1227,13 +783,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/netbsd-x64@npm:0.20.1" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/openbsd-x64@npm:0.19.12" @@ -1241,13 +790,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/openbsd-x64@npm:0.20.1" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/sunos-x64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/sunos-x64@npm:0.19.12" @@ -1255,13 +797,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/sunos-x64@npm:0.20.1" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "@esbuild/win32-arm64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/win32-arm64@npm:0.19.12" @@ -1269,13 +804,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-arm64@npm:0.20.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/win32-ia32@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/win32-ia32@npm:0.19.12" @@ -1283,13 +811,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-ia32@npm:0.20.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/win32-x64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/win32-x64@npm:0.19.12" @@ -1297,13 +818,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-x64@npm:0.20.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -1378,13 +892,6 @@ __metadata: languageName: node linkType: hard -"@ioredis/commands@npm:^1.1.1": - version: 1.2.0 - resolution: "@ioredis/commands@npm:1.2.0" - checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 - languageName: node - linkType: hard - "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -1399,19 +906,6 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: ^5.3.1 - find-up: ^4.1.0 - get-package-type: ^0.1.0 - js-yaml: ^3.13.1 - resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 - languageName: node - linkType: hard - "@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" @@ -1419,155 +913,6 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/console@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - slash: ^3.0.0 - checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 - languageName: node - linkType: hard - -"@jest/core@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/core@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/reporters": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - ci-info: ^3.2.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^29.7.0 - jest-config: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-resolve-dependencies: ^29.7.0 - jest-runner: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - jest-watcher: ^29.7.0 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d - languageName: node - linkType: hard - -"@jest/environment@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/environment@npm:29.7.0" - dependencies: - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.7.0 - checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" - dependencies: - jest-get-type: ^29.6.3 - checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed - languageName: node - linkType: hard - -"@jest/expect@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect@npm:29.7.0" - dependencies: - expect: ^29.7.0 - jest-snapshot: ^29.7.0 - checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/fake-timers@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@sinonjs/fake-timers": ^10.0.2 - "@types/node": "*" - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 - languageName: node - linkType: hard - -"@jest/globals@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/globals@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/types": ^29.6.3 - jest-mock: ^29.7.0 - checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 - languageName: node - linkType: hard - -"@jest/reporters@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/reporters@npm:29.7.0" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - "@types/node": "*" - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^6.0.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - v8-to-istanbul: ^9.0.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 - languageName: node - linkType: hard - "@jest/schemas@npm:^29.6.3": version: 29.6.3 resolution: "@jest/schemas@npm:29.6.3" @@ -1577,78 +922,6 @@ __metadata: languageName: node linkType: hard -"@jest/source-map@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/source-map@npm:29.6.3" - dependencies: - "@jridgewell/trace-mapping": ^0.3.18 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb - languageName: node - linkType: hard - -"@jest/test-result@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-result@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-sequencer@npm:29.7.0" - dependencies: - "@jest/test-result": ^29.7.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - slash: ^3.0.0 - checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd - languageName: node - linkType: hard - -"@jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^2.0.0 - fast-json-stable-stringify: ^2.1.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.2 - checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab - languageName: node - linkType: hard - -"@jest/types@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/types@npm:29.6.3" - dependencies: - "@jest/schemas": ^29.6.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.3 resolution: "@jridgewell/gen-mapping@npm:0.3.3" @@ -1719,7 +992,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.22 resolution: "@jridgewell/trace-mapping@npm:0.3.22" dependencies: @@ -1781,25 +1054,6 @@ __metadata: languageName: node linkType: hard -"@mapbox/node-pre-gyp@npm:^1.0.5": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" - dependencies: - detect-libc: ^2.0.0 - https-proxy-agent: ^5.0.0 - make-dir: ^3.1.0 - node-fetch: ^2.6.7 - nopt: ^5.0.0 - npmlog: ^5.0.1 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.11 - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: b848f6abc531a11961d780db813cc510ca5a5b6bf3184d72134089c6875a91c44d571ba6c1879470020803f7803609e7b2e6e429651c026fe202facd11d444b8 - languageName: node - linkType: hard - "@matrix-org/matrix-sdk-crypto-wasm@npm:^4.3.0": version: 4.6.0 resolution: "@matrix-org/matrix-sdk-crypto-wasm@npm:4.6.0" @@ -1877,48 +1131,6 @@ __metadata: languageName: node linkType: hard -"@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.2" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.2" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.2" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@noble/curves@npm:^1.3.0": version: 1.3.0 resolution: "@noble/curves@npm:1.3.0" @@ -2109,13 +1321,6 @@ __metadata: languageName: node linkType: hard -"@one-ini/wasm@npm:0.1.1": - version: 0.1.1 - resolution: "@one-ini/wasm@npm:0.1.1" - checksum: 11de17108eae57c797e552e36b259398aede999b4a689d78be6459652edc37f3428472410590a9d328011a8751b771063a5648dd5c4205631c55d1d58e313156 - languageName: node - linkType: hard - "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -2201,74 +1406,74 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-augment@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/api-augment@npm:11.1.1" +"@polkadot/api-augment@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/api-augment@npm:11.2.1" dependencies: - "@polkadot/api-base": 11.1.1 - "@polkadot/rpc-augment": 11.1.1 - "@polkadot/types": 11.1.1 - "@polkadot/types-augment": 11.1.1 - "@polkadot/types-codec": 11.1.1 + "@polkadot/api-base": 11.2.1 + "@polkadot/rpc-augment": 11.2.1 + "@polkadot/types": 11.2.1 + "@polkadot/types-augment": 11.2.1 + "@polkadot/types-codec": 11.2.1 "@polkadot/util": ^12.6.2 tslib: ^2.6.2 - checksum: 5bc719582135293a747152db2fef7892c28ab6f53baa54e3bb5bd1df2c8f9c869240045a715c7e86d86b65ca290287500e34ba731564e3e407a47afba154b499 + checksum: b86f595db57eb3e53a18775fde1a193bd50e3422dac054e47e884514c7344cc973016ee4a7eab2494a4083fe275b8ea5b775947ec299d81dd842b5d6029b58db languageName: node linkType: hard -"@polkadot/api-base@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/api-base@npm:11.1.1" +"@polkadot/api-base@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/api-base@npm:11.2.1" dependencies: - "@polkadot/rpc-core": 11.1.1 - "@polkadot/types": 11.1.1 + "@polkadot/rpc-core": 11.2.1 + "@polkadot/types": 11.2.1 "@polkadot/util": ^12.6.2 rxjs: ^7.8.1 tslib: ^2.6.2 - checksum: 8889e27a44eeef72c541adfd5a4bd64b0540a0e6b3a731919f7e3d226b1f6bf85d6b0a4839211dcac69d7b062ee6f59ac9fc7a18ba8f06f27eb6e41a33682bd0 + checksum: 3af717eee631aafccc777c2b1668accbb8a23ae35bb7bda5139c07b2e85a8cca6b7aa3527a155dbe0e460c5f25a0549d1ae95e9fc53ed7e16fc8d8b35826e8a7 languageName: node linkType: hard -"@polkadot/api-derive@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/api-derive@npm:11.1.1" +"@polkadot/api-derive@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/api-derive@npm:11.2.1" dependencies: - "@polkadot/api": 11.1.1 - "@polkadot/api-augment": 11.1.1 - "@polkadot/api-base": 11.1.1 - "@polkadot/rpc-core": 11.1.1 - "@polkadot/types": 11.1.1 - "@polkadot/types-codec": 11.1.1 + "@polkadot/api": 11.2.1 + "@polkadot/api-augment": 11.2.1 + "@polkadot/api-base": 11.2.1 + "@polkadot/rpc-core": 11.2.1 + "@polkadot/types": 11.2.1 + "@polkadot/types-codec": 11.2.1 "@polkadot/util": ^12.6.2 "@polkadot/util-crypto": ^12.6.2 rxjs: ^7.8.1 tslib: ^2.6.2 - checksum: 422cfeb05f21fbe3fc9a6a6403b5aeb3c6544e80cb246e2c9dc700c14aa3b1baccf8752efd53cbb88a1986ff15ac3ed8090717f3704e54683c99b02f9d7a2694 + checksum: 576717e248f1df7d500ea1b14fc4a78b57b675c0f029c79d916d72ca568c7e456a303b34098ed08a308d74ac9b6b5ed249a1ed3dfda0378afc5d68abb03d28a2 languageName: node linkType: hard -"@polkadot/api@npm:11.1.1, @polkadot/api@npm:^11.1.1": - version: 11.1.1 - resolution: "@polkadot/api@npm:11.1.1" +"@polkadot/api@npm:11.2.1, @polkadot/api@npm:^11.2.1": + version: 11.2.1 + resolution: "@polkadot/api@npm:11.2.1" dependencies: - "@polkadot/api-augment": 11.1.1 - "@polkadot/api-base": 11.1.1 - "@polkadot/api-derive": 11.1.1 + "@polkadot/api-augment": 11.2.1 + "@polkadot/api-base": 11.2.1 + "@polkadot/api-derive": 11.2.1 "@polkadot/keyring": ^12.6.2 - "@polkadot/rpc-augment": 11.1.1 - "@polkadot/rpc-core": 11.1.1 - "@polkadot/rpc-provider": 11.1.1 - "@polkadot/types": 11.1.1 - "@polkadot/types-augment": 11.1.1 - "@polkadot/types-codec": 11.1.1 - "@polkadot/types-create": 11.1.1 - "@polkadot/types-known": 11.1.1 + "@polkadot/rpc-augment": 11.2.1 + "@polkadot/rpc-core": 11.2.1 + "@polkadot/rpc-provider": 11.2.1 + "@polkadot/types": 11.2.1 + "@polkadot/types-augment": 11.2.1 + "@polkadot/types-codec": 11.2.1 + "@polkadot/types-create": 11.2.1 + "@polkadot/types-known": 11.2.1 "@polkadot/util": ^12.6.2 "@polkadot/util-crypto": ^12.6.2 eventemitter3: ^5.0.1 rxjs: ^7.8.1 tslib: ^2.6.2 - checksum: 18a8dda90de9d515856afa831610ec66bc42181d483315e069dc9cddadd162814b4762cc805c4bac9bcaff6447d7f4fe0bc6d1617bffe499f9476e0091a5e79c + checksum: b829d72d898cb5f47ec221fd8b81a87bf9a9fd45e4b94f7c2d1295cf93435b80966e99dfb47c5c910ac9ba692559792a152449403805fbdb52bd431e9dde728a languageName: node linkType: hard @@ -2322,40 +1527,40 @@ __metadata: languageName: node linkType: hard -"@polkadot/rpc-augment@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/rpc-augment@npm:11.1.1" +"@polkadot/rpc-augment@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/rpc-augment@npm:11.2.1" dependencies: - "@polkadot/rpc-core": 11.1.1 - "@polkadot/types": 11.1.1 - "@polkadot/types-codec": 11.1.1 + "@polkadot/rpc-core": 11.2.1 + "@polkadot/types": 11.2.1 + "@polkadot/types-codec": 11.2.1 "@polkadot/util": ^12.6.2 tslib: ^2.6.2 - checksum: bbc9e24effa2e895789baeeb6b877be47759d85028e8592c9acd55b4db98bde6b0916e856b09d79c18c008860996afc2c92b0e3bbe2ccb335b4f8933cbf889a0 + checksum: b9092918086fd3b24172a92df00f8ba267e6a1796cf2032a3002b4dd59854f83bdb129e13b798ebfd163c7c175162f9a5b1cd69e6cf1977735128431790b1647 languageName: node linkType: hard -"@polkadot/rpc-core@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/rpc-core@npm:11.1.1" +"@polkadot/rpc-core@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/rpc-core@npm:11.2.1" dependencies: - "@polkadot/rpc-augment": 11.1.1 - "@polkadot/rpc-provider": 11.1.1 - "@polkadot/types": 11.1.1 + "@polkadot/rpc-augment": 11.2.1 + "@polkadot/rpc-provider": 11.2.1 + "@polkadot/types": 11.2.1 "@polkadot/util": ^12.6.2 rxjs: ^7.8.1 tslib: ^2.6.2 - checksum: 2ce76e082a9d31b679acd6e821f2f065167b4d987475e628425ea7e291b89808123b579fb3a4a19f26906f565d30f6cc63b169016686aa88fe90eeff768d64d5 + checksum: 78b45a3fc17f46f2f26b04ff24a6675c73ef81224bdff52274943d6b7bb15528eca493d68d445065eea3656ae20be48b8a4f70d05cef7a00c483b653c3934949 languageName: node linkType: hard -"@polkadot/rpc-provider@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/rpc-provider@npm:11.1.1" +"@polkadot/rpc-provider@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/rpc-provider@npm:11.2.1" dependencies: "@polkadot/keyring": ^12.6.2 - "@polkadot/types": 11.1.1 - "@polkadot/types-support": 11.1.1 + "@polkadot/types": 11.2.1 + "@polkadot/types-support": 11.2.1 "@polkadot/util": ^12.6.2 "@polkadot/util-crypto": ^12.6.2 "@polkadot/x-fetch": ^12.6.2 @@ -2369,81 +1574,81 @@ __metadata: dependenciesMeta: "@substrate/connect": optional: true - checksum: e3cb827328d6d4cb691d2f7f19d89107a3511502507c64a829aab3a3d075e18d335d73795db372708526005c25d7f1ee7306844b5f4cea0587222c83a3ac92d6 + checksum: 080e5e3fdf0ad3f943985b78dcccd2286fe5ba3f727f7f770aa96671fefaeb5909541c5f6ca162fc99b01f095c34e4ff6cb45202e721a4c663e35c40596c6871 languageName: node linkType: hard -"@polkadot/types-augment@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/types-augment@npm:11.1.1" +"@polkadot/types-augment@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/types-augment@npm:11.2.1" dependencies: - "@polkadot/types": 11.1.1 - "@polkadot/types-codec": 11.1.1 + "@polkadot/types": 11.2.1 + "@polkadot/types-codec": 11.2.1 "@polkadot/util": ^12.6.2 tslib: ^2.6.2 - checksum: 39f6e496f06c2bcffe5431d9b1ced49f7686cd28bc451bc436c3ed3353dc858043eee3973143d89f524979f119c0f60204c10666d0fbd12be36b6e99c288e37d + checksum: a4666003c856ac5ed76d67682d7710c1d5ec6b0f440a1701825b95df605020af588b8810807b380747dff3206659d69b3bb82b58328684a11f6ab11d8d30d847 languageName: node linkType: hard -"@polkadot/types-codec@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/types-codec@npm:11.1.1" +"@polkadot/types-codec@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/types-codec@npm:11.2.1" dependencies: "@polkadot/util": ^12.6.2 "@polkadot/x-bigint": ^12.6.2 tslib: ^2.6.2 - checksum: bd88700bcaf91c3e563c2b7d8a19e592045f7e75cdbb37658218ce0100bd2652077d345b115df30f89243f85b9b7ffe58fb919cb4db185cf978a24c236523e1d + checksum: de300af74ea99b87c6d55479e0ea5c0320dd3594ae1110dbfed01ea2d29636ba2b35143bce84cbbf930a3b4d647f956c2b712d9e37626d24593b4453967910ba languageName: node linkType: hard -"@polkadot/types-create@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/types-create@npm:11.1.1" +"@polkadot/types-create@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/types-create@npm:11.2.1" dependencies: - "@polkadot/types-codec": 11.1.1 + "@polkadot/types-codec": 11.2.1 "@polkadot/util": ^12.6.2 tslib: ^2.6.2 - checksum: a232e313af031054f928b2384d308a397355e795f68c002f17a6d232d9cb69d1d06ea0077e430744f7a4ad5458ea88ff91f45baed96a633a628e8a5bc90a044d + checksum: 489d8e0bdaeee341ad4d27323d13634d496f300de54f54afc83c97fcde630bf35bbb4e2a1b7936ba18ef90392d1aed2554f3e9a574f41609116f29c1fe3df88e languageName: node linkType: hard -"@polkadot/types-known@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/types-known@npm:11.1.1" +"@polkadot/types-known@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/types-known@npm:11.2.1" dependencies: "@polkadot/networks": ^12.6.2 - "@polkadot/types": 11.1.1 - "@polkadot/types-codec": 11.1.1 - "@polkadot/types-create": 11.1.1 + "@polkadot/types": 11.2.1 + "@polkadot/types-codec": 11.2.1 + "@polkadot/types-create": 11.2.1 "@polkadot/util": ^12.6.2 tslib: ^2.6.2 - checksum: bed1e7e28094a276e256ad2c21a148c1c71da189b2a2df9c8dbe71e500b80281c95f8b022f7793e2ffbf0b30e2255e0749682cc561aca0d23d40515e2e4c96e3 + checksum: 2441a41b02a02f03134814fd935f0df2d0a1c5cccac24e1222ff5d7b11193538719b8e61fabfb4ec37316122554a8b3bb497dc42a739268b57d8831083593b16 languageName: node linkType: hard -"@polkadot/types-support@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/types-support@npm:11.1.1" +"@polkadot/types-support@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/types-support@npm:11.2.1" dependencies: "@polkadot/util": ^12.6.2 tslib: ^2.6.2 - checksum: a250a7e950dc5990447132de89665d0d9f9198ce7fbc5786a0ff929ca041896a46f0159a44e74e6566762d0e9e29991540e24e14bac6de180b00f1ba8caa759d + checksum: 73eef9577258c7070acc901dd52632a56d6253e9f8c2a5151283bb1667d5ddff01aacac9bd1eefec7ac9965db1b2a2a174a7c153c95af28977bd3bd34698ed7d languageName: node linkType: hard -"@polkadot/types@npm:11.1.1": - version: 11.1.1 - resolution: "@polkadot/types@npm:11.1.1" +"@polkadot/types@npm:11.2.1": + version: 11.2.1 + resolution: "@polkadot/types@npm:11.2.1" dependencies: "@polkadot/keyring": ^12.6.2 - "@polkadot/types-augment": 11.1.1 - "@polkadot/types-codec": 11.1.1 - "@polkadot/types-create": 11.1.1 + "@polkadot/types-augment": 11.2.1 + "@polkadot/types-codec": 11.2.1 + "@polkadot/types-create": 11.2.1 "@polkadot/util": ^12.6.2 "@polkadot/util-crypto": ^12.6.2 rxjs: ^7.8.1 tslib: ^2.6.2 - checksum: b9acd8d958e06c64d1c3e00eea940382bbf56f77cd0c5765f45ef093e5af17cdddf902719a6e7147c6d92df08251744010aac8c420faf17e7dedeeafb6b7619c + checksum: b491255392f4b12653f9878dfd85cde7e226edad4d5321b9fc80e7ac89a63e1b23de3b43aac0c1cd363a6e8d442ca1742be7e20081c751333784bcd55a123290 languageName: node linkType: hard @@ -2665,7 +1870,7 @@ __metadata: languageName: node linkType: hard -"@rollup/pluginutils@npm:^4.0.0, @rollup/pluginutils@npm:^4.1.1": +"@rollup/pluginutils@npm:^4.1.1": version: 4.2.1 resolution: "@rollup/pluginutils@npm:4.2.1" dependencies: @@ -2838,31 +2043,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/merge-streams@npm:^2.1.0": - version: 2.3.0 - resolution: "@sindresorhus/merge-streams@npm:2.3.0" - checksum: e989d53dee68d7e49b4ac02ae49178d561c461144cea83f66fa91ff012d981ad0ad2340cbd13f2fdb57989197f5c987ca22a74eb56478626f04e79df84291159 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^3.0.0": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: 4.0.8 - checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^10.0.2": - version: 10.3.0 - resolution: "@sinonjs/fake-timers@npm:10.3.0" - dependencies: - "@sinonjs/commons": ^3.0.0 - checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 - languageName: node - linkType: hard - "@substrate/connect-extension-protocol@npm:^2.0.0": version: 2.0.0 resolution: "@substrate/connect-extension-protocol@npm:2.0.0" @@ -2964,7 +2144,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.5": +"@types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -2996,7 +2176,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*": version: 7.20.5 resolution: "@types/babel__traverse@npm:7.20.5" dependencies: @@ -3168,15 +2348,6 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.9 - resolution: "@types/graceful-fs@npm:4.1.9" - dependencies: - "@types/node": "*" - checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 - languageName: node - linkType: hard - "@types/http-assert@npm:*": version: 1.5.5 resolution: "@types/http-assert@npm:1.5.5" @@ -3191,41 +2362,13 @@ __metadata: languageName: node linkType: hard -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": +"@types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.6 resolution: "@types/istanbul-lib-coverage@npm:2.0.6" checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 languageName: node linkType: hard -"@types/istanbul-lib-report@npm:*": - version: 3.0.3 - resolution: "@types/istanbul-lib-report@npm:3.0.3" - dependencies: - "@types/istanbul-lib-coverage": "*" - checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" - dependencies: - "@types/istanbul-lib-report": "*" - checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 - languageName: node - linkType: hard - -"@types/jest@npm:^29.5.12": - version: 29.5.12 - resolution: "@types/jest@npm:29.5.12" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c - languageName: node - linkType: hard - "@types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" @@ -3301,7 +2444,7 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:*, @types/lodash@npm:^4.14.165": +"@types/lodash@npm:*": version: 4.14.202 resolution: "@types/lodash@npm:4.14.202" checksum: a91acf3564a568c6f199912f3eb2c76c99c5a0d7e219394294213b3f2d54f672619f0fde4da22b29dc5d4c31457cd799acc2e5cb6bd90f9af04a1578483b6ff7 @@ -3469,13 +2612,6 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.0": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 - languageName: node - linkType: hard - "@types/stylis@npm:4.2.0": version: 4.2.0 resolution: "@types/stylis@npm:4.2.0" @@ -3491,9 +2627,9 @@ __metadata: linkType: hard "@types/validator@npm:^13.7.1": - version: 13.11.9 - resolution: "@types/validator@npm:13.11.9" - checksum: c8d53c9e45479328ed72136d13ac80f13e8bb72ab0a6ae2e82802a55b6d84e045473267d8bf66546961f96ed0bbd0f310f317592dccc9fd11a2a81025c3571ce + version: 13.11.10 + resolution: "@types/validator@npm:13.11.10" + checksum: 0559254715f222664546e29d3e13cb731327f5ef556eb7c149de5a2b58630dc90831eb268a0a83ddb5e67ffddb28e0d43bf480258eef84ee5e3ae919d0c1d87a languageName: node linkType: hard @@ -3532,22 +2668,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs-parser@npm:*": - version: 21.0.3 - resolution: "@types/yargs-parser@npm:21.0.3" - checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" - dependencies: - "@types/yargs-parser": "*" - checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^5.59.9": version: 5.62.0 resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" @@ -3799,28 +2919,6 @@ __metadata: languageName: node linkType: hard -"@vercel/nft@npm:^0.26.2": - version: 0.26.4 - resolution: "@vercel/nft@npm:0.26.4" - dependencies: - "@mapbox/node-pre-gyp": ^1.0.5 - "@rollup/pluginutils": ^4.0.0 - acorn: ^8.6.0 - acorn-import-attributes: ^1.9.2 - async-sema: ^3.1.1 - bindings: ^1.4.0 - estree-walker: 2.0.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - micromatch: ^4.0.2 - node-gyp-build: ^4.2.2 - resolve-from: ^5.0.0 - bin: - nft: out/cli.js - checksum: 018781c8bbe1cc4850db7536f41ec484b3b1b0c6362f5b22226f96edc9251c14142854d41924bf3b4b0ce653d107ebfd0ae1dbcc423a20e88f021f1a69869df7 - languageName: node - linkType: hard - "@vitejs/plugin-react@npm:^4.2.1": version: 4.2.1 resolution: "@vitejs/plugin-react@npm:4.2.1" @@ -4053,15 +3151,6 @@ __metadata: languageName: node linkType: hard -"acorn-import-attributes@npm:^1.9.2": - version: 1.9.2 - resolution: "acorn-import-attributes@npm:1.9.2" - peerDependencies: - acorn: ^8 - checksum: d4baad00ce9e09b0b924e695c0621bb8e9b221797cd9ed7e2f79fb5e763dae04aacb8cf082ebde54e1244cbaf473b04a0211ae2486358fa7232414d2013159e0 - languageName: node - linkType: hard - "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -4078,7 +3167,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.11.3 resolution: "acorn@npm:8.11.3" bin: @@ -4087,15 +3176,6 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": version: 7.1.0 resolution: "agent-base@npm:7.1.0" @@ -4115,7 +3195,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:~6.12.6": +"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -4134,15 +3214,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -4157,13 +3228,6 @@ __metadata: languageName: node linkType: hard -"ansi-sequence-parser@npm:^1.1.0": - version: 1.1.1 - resolution: "ansi-sequence-parser@npm:1.1.1" - checksum: ead5b15c596e8e85ca02951a844366c6776769dcc9fd1bd3a0db11bb21364554822c6a439877fb599e7e1ffa0b5f039f1e5501423950457f3dcb2f480c30b188 - languageName: node - linkType: hard - "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -4189,21 +3253,14 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": +"ansi-styles@npm:^6.1.0": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 languageName: node linkType: hard -"any-promise@npm:^1.0.0": - version: 1.3.0 - resolution: "any-promise@npm:1.3.0" - checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de - languageName: node - linkType: hard - -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": +"anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -4213,23 +3270,6 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c - languageName: node - linkType: hard - "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -4253,13 +3293,6 @@ __metadata: languageName: node linkType: hard -"array-find-index@npm:^1.0.1": - version: 1.0.2 - resolution: "array-find-index@npm:1.0.2" - checksum: aac128bf369e1ac6c06ff0bb330788371c0e256f71279fb92d745e26fb4b9db8920e485b4ec25e841c93146bf71a34dcdbcefa115e7e0f96927a214d237b7081 - languageName: node - linkType: hard - "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -4267,60 +3300,6 @@ __metadata: languageName: node linkType: hard -"arrgv@npm:^1.0.2": - version: 1.0.2 - resolution: "arrgv@npm:1.0.2" - checksum: 470bbb406ea3b34810dd8b03c0b33282617a42d9fce0ab45d58596efefd042fc548eda49161fa8e3f607cbe9df90e7a67003a09043ab9081eff70f97c63dd0e2 - languageName: node - linkType: hard - -"arrify@npm:^3.0.0": - version: 3.0.0 - resolution: "arrify@npm:3.0.0" - checksum: d6c6f3dad9571234f320e130d57fddb2cc283c87f2ac7df6c7005dffc5161b7bb9376f4be655ed257050330336e84afc4f3020d77696ad231ff580a94ae5aba6 - languageName: node - linkType: hard - -"asn1.js@npm:^4.10.1": - version: 4.10.1 - resolution: "asn1.js@npm:4.10.1" - dependencies: - bn.js: ^4.0.0 - inherits: ^2.0.1 - minimalistic-assert: ^1.0.0 - checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 - languageName: node - linkType: hard - -"asn1@npm:~0.2.3": - version: 0.2.6 - resolution: "asn1@npm:0.2.6" - dependencies: - safer-buffer: ~2.1.0 - checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d - languageName: node - linkType: hard - -"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": - version: 1.0.0 - resolution: "assert-plus@npm:1.0.0" - checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 - languageName: node - linkType: hard - -"assert@npm:^2.0.0": - version: 2.1.0 - resolution: "assert@npm:2.1.0" - dependencies: - call-bind: ^1.0.2 - is-nan: ^1.3.2 - object-is: ^1.1.5 - object.assign: ^4.1.4 - util: ^0.12.5 - checksum: 1ed1cabba9abe55f4109b3f7292b4e4f3cf2953aad8dc148c0b3c3bd676675c31b1abb32ef563b7d5a19d1715bf90d1e5f09fad2a4ee655199468902da80f7c2 - languageName: node - linkType: hard - "assertion-error@npm:^1.1.0": version: 1.1.0 resolution: "assertion-error@npm:1.1.0" @@ -4337,13 +3316,6 @@ __metadata: languageName: node linkType: hard -"async-sema@npm:^3.1.1": - version: 3.1.1 - resolution: "async-sema@npm:3.1.1" - checksum: 07b8c51f6cab107417ecdd8126b7a9fe5a75151b7f69fdd420dcc8ee08f9e37c473a217247e894b56e999b088b32e902dbe41637e4e9b594d3f8dfcdddfadc5e - languageName: node - linkType: hard - "async@npm:^3.2.3": version: 3.2.5 resolution: "async@npm:3.2.5" @@ -4358,84 +3330,6 @@ __metadata: languageName: node linkType: hard -"ava@npm:^6.1.2": - version: 6.1.2 - resolution: "ava@npm:6.1.2" - dependencies: - "@vercel/nft": ^0.26.2 - acorn: ^8.11.3 - acorn-walk: ^8.3.2 - ansi-styles: ^6.2.1 - arrgv: ^1.0.2 - arrify: ^3.0.0 - callsites: ^4.1.0 - cbor: ^9.0.1 - chalk: ^5.3.0 - chunkd: ^2.0.1 - ci-info: ^4.0.0 - ci-parallel-vars: ^1.0.1 - cli-truncate: ^4.0.0 - code-excerpt: ^4.0.0 - common-path-prefix: ^3.0.0 - concordance: ^5.0.4 - currently-unhandled: ^0.4.1 - debug: ^4.3.4 - emittery: ^1.0.1 - figures: ^6.0.1 - globby: ^14.0.0 - ignore-by-default: ^2.1.0 - indent-string: ^5.0.0 - is-plain-object: ^5.0.0 - is-promise: ^4.0.0 - matcher: ^5.0.0 - memoize: ^10.0.0 - ms: ^2.1.3 - p-map: ^7.0.1 - package-config: ^5.0.0 - picomatch: ^3.0.1 - plur: ^5.1.0 - pretty-ms: ^9.0.0 - resolve-cwd: ^3.0.0 - stack-utils: ^2.0.6 - strip-ansi: ^7.1.0 - supertap: ^3.0.1 - temp-dir: ^3.0.0 - write-file-atomic: ^5.0.1 - yargs: ^17.7.2 - peerDependencies: - "@ava/typescript": "*" - peerDependenciesMeta: - "@ava/typescript": - optional: true - bin: - ava: entrypoints/cli.mjs - checksum: 76764b884e5c1a553fbb846b226f73c5be363241a0f881df396c1af3f0444c49317e0003ab098f691bdfe7e3251f393a844ab3cedfa4ab860c923c6eb6cd14ca - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.7": - version: 1.0.7 - resolution: "available-typed-arrays@npm:1.0.7" - dependencies: - possible-typed-array-names: ^1.0.0 - checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 - languageName: node - linkType: hard - -"aws-sign2@npm:~0.7.0": - version: 0.7.0 - resolution: "aws-sign2@npm:0.7.0" - checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 - languageName: node - linkType: hard - -"aws4@npm:^1.8.0": - version: 1.12.0 - resolution: "aws4@npm:1.12.0" - checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc - languageName: node - linkType: hard - "axios@npm:^1.6.7": version: 1.6.7 resolution: "axios@npm:1.6.7" @@ -4454,48 +3348,6 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "babel-jest@npm:29.7.0" - dependencies: - "@jest/transform": ^29.7.0 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.6.3 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^5.0.4 - test-exclude: ^6.0.0 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-plugin-jest-hoist@npm:29.6.3" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 - languageName: node - linkType: hard - "babel-plugin-macros@npm:^3.1.0": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" @@ -4507,40 +3359,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-preset-jest@npm:29.6.3" - dependencies: - babel-plugin-jest-hoist: ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -4562,22 +3380,6 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 - languageName: node - linkType: hard - -"bcrypt-pbkdf@npm:^1.0.0": - version: 1.0.2 - resolution: "bcrypt-pbkdf@npm:1.0.2" - dependencies: - tweetnacl: ^0.14.3 - checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 - languageName: node - linkType: hard - "before-after-hook@npm:^2.2.0": version: 2.2.3 resolution: "before-after-hook@npm:2.2.3" @@ -4592,50 +3394,13 @@ __metadata: languageName: node linkType: hard -"bindings@npm:^1.4.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: 1.0.0 - checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 - languageName: node - linkType: hard - -"bluebird@npm:^3.7.2": - version: 3.7.2 - resolution: "bluebird@npm:3.7.2" - checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef - languageName: node - linkType: hard - -"blueimp-md5@npm:^2.10.0": - version: 2.19.0 - resolution: "blueimp-md5@npm:2.19.0" - checksum: 28095dcbd2c67152a2938006e8d7c74c3406ba6556071298f872505432feb2c13241b0476644160ee0a5220383ba94cb8ccdac0053b51f68d168728f9c382530 - languageName: node - linkType: hard - -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": - version: 4.12.0 - resolution: "bn.js@npm:4.12.0" - checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 - languageName: node - linkType: hard - -"bn.js@npm:^5.0.0, bn.js@npm:^5.2.1": +"bn.js@npm:^5.2.1": version: 5.2.1 resolution: "bn.js@npm:5.2.1" checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 languageName: node linkType: hard -"boolean@npm:^3.2.0": - version: 3.2.0 - resolution: "boolean@npm:3.2.0" - checksum: fb29535b8bf710ef45279677a86d14f5185d604557204abd2ca5fa3fb2a5c80e04d695c8dbf13ab269991977a79bb6c04b048220a6b2a3849853faa94f4a7d77 - languageName: node - linkType: hard - "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -4664,105 +3429,6 @@ __metadata: languageName: node linkType: hard -"bree@npm:^9.2.2": - version: 9.2.2 - resolution: "bree@npm:9.2.2" - dependencies: - "@breejs/later": ^4.1.0 - boolean: ^3.2.0 - combine-errors: ^3.0.3 - cron-validate: ^1.4.5 - human-interval: ^2.0.1 - is-string-and-not-blank: ^0.0.2 - is-valid-path: ^0.1.1 - ms: ^2.1.3 - p-wait-for: 3 - safe-timers: ^1.1.0 - checksum: c729a71c459fdd57b9f5d851f52323c22ca4867737a9d098e99803c8fd18d8d28b65a7b2fd8724d0c6b88a5420fd9a0f6487c8533a0fc9504a637811b55d0c44 - languageName: node - linkType: hard - -"brorand@npm:^1.0.1, brorand@npm:^1.1.0": - version: 1.1.0 - resolution: "brorand@npm:1.1.0" - checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be - languageName: node - linkType: hard - -"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": - version: 1.2.0 - resolution: "browserify-aes@npm:1.2.0" - dependencies: - buffer-xor: ^1.0.3 - cipher-base: ^1.0.0 - create-hash: ^1.1.0 - evp_bytestokey: ^1.0.3 - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 - languageName: node - linkType: hard - -"browserify-cipher@npm:^1.0.0": - version: 1.0.1 - resolution: "browserify-cipher@npm:1.0.1" - dependencies: - browserify-aes: ^1.0.4 - browserify-des: ^1.0.0 - evp_bytestokey: ^1.0.0 - checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 - languageName: node - linkType: hard - -"browserify-des@npm:^1.0.0": - version: 1.0.2 - resolution: "browserify-des@npm:1.0.2" - dependencies: - cipher-base: ^1.0.1 - des.js: ^1.0.0 - inherits: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7 - languageName: node - linkType: hard - -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" - dependencies: - bn.js: ^5.0.0 - randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 - languageName: node - linkType: hard - -"browserify-sign@npm:^4.0.0": - version: 4.2.3 - resolution: "browserify-sign@npm:4.2.3" - dependencies: - bn.js: ^5.2.1 - browserify-rsa: ^4.1.0 - create-hash: ^1.2.0 - create-hmac: ^1.1.7 - elliptic: ^6.5.5 - hash-base: ~3.0 - inherits: ^2.0.4 - parse-asn1: ^5.1.7 - readable-stream: ^2.3.8 - safe-buffer: ^5.2.1 - checksum: 403a8061d229ae31266670345b4a7c00051266761d2c9bbeb68b1a9bcb05f68143b16110cf23a171a5d6716396a1f41296282b3e73eeec0a1871c77f0ff4ee6b - languageName: node - linkType: hard - -"browserify-zlib@npm:^0.2.0": - version: 0.2.0 - resolution: "browserify-zlib@npm:0.2.0" - dependencies: - pako: ~1.0.5 - checksum: 5cd9d6a665190fedb4a97dfbad8dabc8698d8a507298a03f42c734e96d58ca35d3c7d4085e283440bbca1cd1938cff85031728079bedb3345310c58ab1ec92d6 - languageName: node - linkType: hard - "browserslist@npm:^4.22.2": version: 4.23.0 resolution: "browserslist@npm:4.23.0" @@ -4777,15 +3443,6 @@ __metadata: languageName: node linkType: hard -"bs-logger@npm:0.x": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" - dependencies: - fast-json-stable-stringify: 2.x - checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 - languageName: node - linkType: hard - "bs58@npm:^5.0.0": version: 5.0.0 resolution: "bs58@npm:5.0.0" @@ -4795,15 +3452,6 @@ __metadata: languageName: node linkType: hard -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - "bson@npm:^5.5.0": version: 5.5.1 resolution: "bson@npm:5.5.1" @@ -4839,46 +3487,6 @@ __metadata: languageName: node linkType: hard -"buffer-xor@npm:^1.0.3": - version: 1.0.3 - resolution: "buffer-xor@npm:1.0.3" - checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a - languageName: node - linkType: hard - -"buffer@npm:^6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: ^1.3.1 - ieee754: ^1.2.1 - checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 - languageName: node - linkType: hard - -"builtin-status-codes@npm:^3.0.0": - version: 3.0.0 - resolution: "builtin-status-codes@npm:3.0.0" - checksum: 1119429cf4b0d57bf76b248ad6f529167d343156ebbcc4d4e4ad600484f6bc63002595cbb61b67ad03ce55cd1d3c4711c03bbf198bf24653b8392420482f3773 - languageName: node - linkType: hard - -"bullmq@npm:^5.4.2": - version: 5.4.2 - resolution: "bullmq@npm:5.4.2" - dependencies: - cron-parser: ^4.6.0 - ioredis: ^5.3.2 - lodash: ^4.17.21 - msgpackr: ^1.10.1 - node-abort-controller: ^3.1.1 - semver: ^7.5.4 - tslib: ^2.0.0 - uuid: ^9.0.0 - checksum: 54def3402aa37f58c8adaf42c0b4b4ac49b8846912ded0bbe12e19f3b5a7bae29a0a171511100471e8b5092c00d0a9bd83521d299465c17d76416fc77d054b58 - languageName: node - linkType: hard - "bundle-name@npm:^4.1.0": version: 4.1.0 resolution: "bundle-name@npm:4.1.0" @@ -4932,7 +3540,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": +"call-bind@npm:^1.0.6": version: 1.0.7 resolution: "call-bind@npm:1.0.7" dependencies: @@ -4959,21 +3567,7 @@ __metadata: languageName: node linkType: hard -"callsites@npm:^4.1.0": - version: 4.1.0 - resolution: "callsites@npm:4.1.0" - checksum: 4ad31de7b7615fa25bdab9c2373865209d2d5190f895cdf2e2f518bd1dafa7ebcda2e6e9cc9640f2dfde6b3893d82fa4359a78ffc27baad2503227553c6882fa - languageName: node - linkType: hard - -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.2.0, camelcase@npm:^6.3.0": +"camelcase@npm:^6.3.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d @@ -5003,22 +3597,6 @@ __metadata: languageName: node linkType: hard -"caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 - languageName: node - linkType: hard - -"cbor@npm:^9.0.1": - version: 9.0.2 - resolution: "cbor@npm:9.0.2" - dependencies: - nofilter: ^3.1.0 - checksum: 925edae7bf964be5a26dba1b7ba6311ac12b6a66234dc958958997a0576cdc740632dc19852a5b84d8a75101936bea1fe122dc22539d6e11f4539c731853ba2e - languageName: node - linkType: hard - "chai@npm:^4.3.10": version: 4.4.1 resolution: "chai@npm:4.4.1" @@ -5034,7 +3612,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:5.3.0, chalk@npm:^5.3.0": +"chalk@npm:5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 @@ -5052,7 +3630,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.2": +"chalk@npm:^4.0.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -5062,13 +3640,6 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - "charenc@npm:~0.0.1": version: 0.0.2 resolution: "charenc@npm:0.0.2" @@ -5111,51 +3682,6 @@ __metadata: languageName: node linkType: hard -"chunkd@npm:^2.0.1": - version: 2.0.1 - resolution: "chunkd@npm:2.0.1" - checksum: bab8cc08c752a3648984385dc6f61d751e89dbeef648d22a3b661e1d470eaa0f5182f0b4303710f13ae83d2f85144f8eb2dde7a975861d9021b5c56b881f457b - languageName: node - linkType: hard - -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 - languageName: node - linkType: hard - -"ci-info@npm:^4.0.0": - version: 4.0.0 - resolution: "ci-info@npm:4.0.0" - checksum: 122fe41c5eb8d0b5fa0ab6fd674c5ddcf2dc59766528b062a0144ff0d913cfb210ef925ec52110e7c2a7f4e603d5f0e8b91cfe68867e196e9212fa0b94d0a08a - languageName: node - linkType: hard - -"ci-parallel-vars@npm:^1.0.1": - version: 1.0.1 - resolution: "ci-parallel-vars@npm:1.0.1" - checksum: ae859831f7e8e3585db731b8306c336616e37bd709dad1d7775ea4c0731aefd94741dabb48201edc6827d000008fd7fb72cb977967614ee2d99d6b499f0c35fe - languageName: node - linkType: hard - -"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": - version: 1.0.4 - resolution: "cipher-base@npm:1.0.4" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.3 - resolution: "cjs-module-lexer@npm:1.2.3" - checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a - languageName: node - linkType: hard - "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -5163,16 +3689,6 @@ __metadata: languageName: node linkType: hard -"cli-truncate@npm:^4.0.0": - version: 4.0.0 - resolution: "cli-truncate@npm:4.0.0" - dependencies: - slice-ansi: ^5.0.0 - string-width: ^7.0.0 - checksum: d5149175fd25ca985731bdeec46a55ec237475cf74c1a5e103baea696aceb45e372ac4acbaabf1316f06bd62e348123060f8191ffadfeedebd2a70a2a7fb199d - languageName: node - linkType: hard - "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -5198,13 +3714,6 @@ __metadata: languageName: node linkType: hard -"cluster-key-slot@npm:^1.1.0": - version: 1.1.2 - resolution: "cluster-key-slot@npm:1.1.2" - checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681 - languageName: node - linkType: hard - "co-body@npm:^6.0.0": version: 6.1.0 resolution: "co-body@npm:6.1.0" @@ -5224,15 +3733,6 @@ __metadata: languageName: node linkType: hard -"code-excerpt@npm:^4.0.0": - version: 4.0.0 - resolution: "code-excerpt@npm:4.0.0" - dependencies: - convert-to-spaces: ^2.0.1 - checksum: d57137d8f4825879283a828cc02a1115b56858dc54ed06c625c8f67d6685d1becd2fbaa7f0ab19ecca1f5cca03f8c97bbc1f013cab40261e4d3275032e65efe9 - languageName: node - linkType: hard - "coingecko-api-v3@npm:^0.0.29": version: 0.0.29 resolution: "coingecko-api-v3@npm:0.0.29" @@ -5242,13 +3742,6 @@ __metadata: languageName: node linkType: hard -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da - languageName: node - linkType: hard - "color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -5291,15 +3784,6 @@ __metadata: languageName: node linkType: hard -"color-support@npm:^1.1.2": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - "color@npm:^3.1.3": version: 3.2.1 resolution: "color@npm:3.2.1" @@ -5334,17 +3818,7 @@ __metadata: languageName: node linkType: hard -"combine-errors@npm:^3.0.3": - version: 3.0.3 - resolution: "combine-errors@npm:3.0.3" - dependencies: - custom-error-instance: 2.1.1 - lodash.uniqby: 4.5.0 - checksum: bd0b0d2a4020f9976b8fe8eb7d5aa855b43ecacdcb61ee1fc5664d73ff8c1d7d0bbe4dd948bea7ba1870518bfc5688b89941de7a4967659418b4664cdb02884f - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": +"combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -5360,13 +3834,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^10.0.0": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 - languageName: node - linkType: hard - "commander@npm:^12.0.0": version: 12.0.0 resolution: "commander@npm:12.0.0" @@ -5388,13 +3855,6 @@ __metadata: languageName: node linkType: hard -"common-path-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "common-path-prefix@npm:3.0.0" - checksum: fdb3c4f54e51e70d417ccd950c07f757582de800c0678ca388aedefefc84982039f346f9fd9a1252d08d2da9e9ef4019f580a1d1d3a10da031e4bb3c924c5818 - languageName: node - linkType: hard - "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -5425,22 +3885,6 @@ __metadata: languageName: node linkType: hard -"concordance@npm:^5.0.4": - version: 5.0.4 - resolution: "concordance@npm:5.0.4" - dependencies: - date-time: ^3.1.0 - esutils: ^2.0.3 - fast-diff: ^1.2.0 - js-string-escape: ^1.0.1 - lodash: ^4.17.15 - md5-hex: ^3.0.1 - semver: ^7.3.2 - well-known-symbols: ^2.0.0 - checksum: 749153ba711492feb7c3d2f5bb04c107157440b3e39509bd5dd19ee7b3ac751d1e4cd75796d9f702e0a713312dbc661421c68aa4a2c34d5f6d91f47e3a1c64a6 - languageName: node - linkType: hard - "concurrently@npm:^8.2.2": version: 8.2.2 resolution: "concurrently@npm:8.2.2" @@ -5461,57 +3905,6 @@ __metadata: languageName: node linkType: hard -"condense-newlines@npm:^0.2.1": - version: 0.2.1 - resolution: "condense-newlines@npm:0.2.1" - dependencies: - extend-shallow: ^2.0.1 - is-whitespace: ^0.3.0 - kind-of: ^3.0.2 - checksum: 3c20ff6ee88b5d2e81c122f33b5ba5d6976cdf86d83527fadea308b3020ed70af7ed98c2e2d94d36f27fcd723a7a477941c19575e0d2c8db6afc4aac6926a54e - languageName: node - linkType: hard - -"config-chain@npm:^1.1.13": - version: 1.1.13 - resolution: "config-chain@npm:1.1.13" - dependencies: - ini: ^1.3.4 - proto-list: ~1.2.1 - checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab - languageName: node - linkType: hard - -"console-browserify@npm:^1.2.0": - version: 1.2.0 - resolution: "console-browserify@npm:1.2.0" - checksum: 226591eeff8ed68e451dffb924c1fb750c654d54b9059b3b261d360f369d1f8f70650adecf2c7136656236a4bfeb55c39281b5d8a55d792ebbb99efd3d848d52 - languageName: node - linkType: hard - -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - -"consolidate@npm:^0.16.0": - version: 0.16.0 - resolution: "consolidate@npm:0.16.0" - dependencies: - bluebird: ^3.7.2 - checksum: f17164ffb2c4f79b4cbf685f1c76a49f59d329a40954b436425498861dc137b46fe821b2aadafa2dcfeb7eebd46846f35bd2c36b4a704d38521b4210a22a7515 - languageName: node - linkType: hard - -"constants-browserify@npm:^1.0.0": - version: 1.0.0 - resolution: "constants-browserify@npm:1.0.0" - checksum: f7ac8c6d0b6e4e0c77340a1d47a3574e25abd580bfd99ad707b26ff7618596cf1a5e5ce9caf44715e9e01d4a5d12cb3b4edaf1176f34c19adb2874815a56e64f - languageName: node - linkType: hard - "content-disposition@npm:~0.5.2": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -5542,13 +3935,6 @@ __metadata: languageName: node linkType: hard -"convert-to-spaces@npm:^2.0.1": - version: 2.0.1 - resolution: "convert-to-spaces@npm:2.0.1" - checksum: bbb324e5916fe9866f65c0ff5f9c1ea933764d0bdb09fccaf59542e40545ed483db6b2339c6d9eb56a11965a58f1a6038f3174f0e2fb7601343c7107ca5e2751 - languageName: node - linkType: hard - "cookies@npm:~0.9.0": version: 0.9.1 resolution: "cookies@npm:0.9.1" @@ -5575,14 +3961,7 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:1.0.2": - version: 1.0.2 - resolution: "core-util-is@npm:1.0.2" - checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab - languageName: node - linkType: hard - -"core-util-is@npm:^1.0.2, core-util-is@npm:~1.0.0": +"core-util-is@npm:^1.0.2": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 @@ -5602,60 +3981,6 @@ __metadata: languageName: node linkType: hard -"create-ecdh@npm:^4.0.0": - version: 4.0.4 - resolution: "create-ecdh@npm:4.0.4" - dependencies: - bn.js: ^4.1.0 - elliptic: ^6.5.3 - checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b - languageName: node - linkType: hard - -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": - version: 1.2.0 - resolution: "create-hash@npm:1.2.0" - dependencies: - cipher-base: ^1.0.1 - inherits: ^2.0.1 - md5.js: ^1.3.4 - ripemd160: ^2.0.1 - sha.js: ^2.4.0 - checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 - languageName: node - linkType: hard - -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": - version: 1.1.7 - resolution: "create-hmac@npm:1.1.7" - dependencies: - cipher-base: ^1.0.3 - create-hash: ^1.1.0 - inherits: ^2.0.1 - ripemd160: ^2.0.0 - safe-buffer: ^5.0.1 - sha.js: ^2.4.8 - checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed - languageName: node - linkType: hard - -"create-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "create-jest@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - prompts: ^2.0.1 - bin: - create-jest: bin/create-jest.js - checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 - languageName: node - linkType: hard - "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -5663,24 +3988,6 @@ __metadata: languageName: node linkType: hard -"cron-parser@npm:^4.6.0": - version: 4.9.0 - resolution: "cron-parser@npm:4.9.0" - dependencies: - luxon: ^3.2.1 - checksum: 3cf248fc5cae6c19ec7124962b1cd84b76f02b9bc4f58976b3bd07624db3ef10aaf1548efcc2d2dcdab0dad4f12029d640a55ecce05ea5e1596af9db585502cf - languageName: node - linkType: hard - -"cron-validate@npm:^1.4.5": - version: 1.4.5 - resolution: "cron-validate@npm:1.4.5" - dependencies: - yup: 0.32.9 - checksum: 9d418955d91397e634515536f6e660565c8e87825cf51cc377af52c75241b473e1dcf17676cd2ad0302e70a1d340ae4343568ff7efc1d746965afe3f8921f3b1 - languageName: node - linkType: hard - "cron@npm:*, cron@npm:^3.1.6": version: 3.1.6 resolution: "cron@npm:3.1.6" @@ -5709,25 +4016,6 @@ __metadata: languageName: node linkType: hard -"crypto-browserify@npm:^3.12.0": - version: 3.12.0 - resolution: "crypto-browserify@npm:3.12.0" - dependencies: - browserify-cipher: ^1.0.0 - browserify-sign: ^4.0.0 - create-ecdh: ^4.0.0 - create-hash: ^1.1.0 - create-hmac: ^1.1.0 - diffie-hellman: ^5.0.0 - inherits: ^2.0.1 - pbkdf2: ^3.0.3 - public-encrypt: ^4.0.0 - randombytes: ^2.0.0 - randomfill: ^1.0.3 - checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 - languageName: node - linkType: hard - "crypto-js@npm:^4.2.0": version: 4.2.0 resolution: "crypto-js@npm:4.2.0" @@ -5776,22 +4064,6 @@ __metadata: languageName: node linkType: hard -"currently-unhandled@npm:^0.4.1": - version: 0.4.1 - resolution: "currently-unhandled@npm:0.4.1" - dependencies: - array-find-index: ^1.0.1 - checksum: 1f59fe10b5339b54b1a1eee110022f663f3495cf7cf2f480686e89edc7fa8bfe42dbab4b54f85034bc8b092a76cc7becbc2dad4f9adad332ab5831bec39ad540 - languageName: node - linkType: hard - -"custom-error-instance@npm:2.1.1": - version: 2.1.1 - resolution: "custom-error-instance@npm:2.1.1" - checksum: db01483864c9f4356b720b443a1f9b374758745a75199187a0ccc12505cf822bc801a0d8e3f96d727559880024f40e09667d5c08e5de0bff243c6b5ae0bd303c - languageName: node - linkType: hard - "d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6": version: 3.2.4 resolution: "d3-array@npm:3.2.4" @@ -5892,15 +4164,6 @@ __metadata: languageName: node linkType: hard -"dashdash@npm:^1.12.0": - version: 1.14.1 - resolution: "dashdash@npm:1.14.1" - dependencies: - assert-plus: ^1.0.0 - checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 - languageName: node - linkType: hard - "data-uri-to-buffer@npm:^4.0.0": version: 4.0.1 resolution: "data-uri-to-buffer@npm:4.0.1" @@ -5917,12 +4180,10 @@ __metadata: languageName: node linkType: hard -"date-time@npm:^3.1.0": - version: 3.1.0 - resolution: "date-time@npm:3.1.0" - dependencies: - time-zone: ^1.0.0 - checksum: f9cfcd1b15dfeabab15c0b9d18eb9e4e2d9d4371713564178d46a8f91ad577a290b5178b80050718d02d9c0cf646f8a875011e12d1ed05871e9f72c72c8a8fe6 +"date-fns@npm:^3.6.0": + version: 3.6.0 + resolution: "date-fns@npm:3.6.0" + checksum: 0daa1e9a436cf99f9f2ae9232b55e11f3dd46132bee10987164f3eebd29f245b2e066d7d7db40782627411ecf18551d8f4c9fcdf2226e48bb66545407d448ab7 languageName: node linkType: hard @@ -5968,18 +4229,6 @@ __metadata: languageName: node linkType: hard -"dedent@npm:^1.0.0": - version: 1.5.1 - resolution: "dedent@npm:1.5.1" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a - languageName: node - linkType: hard - "deep-eql@npm:^4.1.3": version: 4.1.3 resolution: "deep-eql@npm:4.1.3" @@ -6003,13 +4252,6 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 - languageName: node - linkType: hard - "default-browser-id@npm:^5.0.0": version: 5.0.0 resolution: "default-browser-id@npm:5.0.0" @@ -6027,7 +4269,7 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2": +"define-data-property@npm:^1.1.2": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" dependencies: @@ -6045,17 +4287,6 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": - version: 1.2.1 - resolution: "define-properties@npm:1.2.1" - dependencies: - define-data-property: ^1.0.1 - has-property-descriptors: ^1.0.0 - object-keys: ^1.1.1 - checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -6070,13 +4301,6 @@ __metadata: languageName: node linkType: hard -"denque@npm:^2.1.0": - version: 2.1.0 - resolution: "denque@npm:2.1.0" - checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 - languageName: node - linkType: hard - "depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -6098,16 +4322,6 @@ __metadata: languageName: node linkType: hard -"des.js@npm:^1.0.0": - version: 1.1.0 - resolution: "des.js@npm:1.1.0" - dependencies: - inherits: ^2.0.1 - minimalistic-assert: ^1.0.0 - checksum: 0e9c1584b70d31e20f20a613fc9ef60fbc6a147dfec9e448a168794a4b97ac04d8dc47ea008f1fa93b0f8aaf7c1ead632a5e59ce1913a6079d2d244c9f5ebe33 - languageName: node - linkType: hard - "destroy@npm:^1.0.4": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -6115,20 +4329,6 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.0": - version: 2.0.2 - resolution: "detect-libc@npm:2.0.2" - checksum: 2b2cd3649b83d576f4be7cc37eb3b1815c79969c8b1a03a40a4d55d83bc74d010753485753448eacb98784abf22f7dbd3911fd3b60e29fda28fed2d1a997944d - languageName: node - linkType: hard - -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -6143,17 +4343,6 @@ __metadata: languageName: node linkType: hard -"diffie-hellman@npm:^5.0.0": - version: 5.0.3 - resolution: "diffie-hellman@npm:5.0.3" - dependencies: - bn.js: ^4.1.0 - miller-rabin: ^4.0.0 - randombytes: ^2.0.0 - checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065 - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -6182,13 +4371,6 @@ __metadata: languageName: node linkType: hard -"domain-browser@npm:^4.19.0": - version: 4.23.0 - resolution: "domain-browser@npm:4.23.0" - checksum: 95b772f5fa88300240694380e06e03868573acdf86ca392a58c78602d6536dca2097ad2469a1500bd23a1329b09992de846e0b66c364cbf5711a7fee3ee5dac9 - languageName: node - linkType: hard - "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -6196,30 +4378,6 @@ __metadata: languageName: node linkType: hard -"ecc-jsbn@npm:~0.1.1": - version: 0.1.2 - resolution: "ecc-jsbn@npm:0.1.2" - dependencies: - jsbn: ~0.1.0 - safer-buffer: ^2.1.0 - checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a - languageName: node - linkType: hard - -"editorconfig@npm:^1.0.4": - version: 1.0.4 - resolution: "editorconfig@npm:1.0.4" - dependencies: - "@one-ini/wasm": 0.1.1 - commander: ^10.0.0 - minimatch: 9.0.1 - semver: ^7.5.3 - bin: - editorconfig: bin/editorconfig - checksum: 09904f19381b3ddf132cea0762971aba887236f387be3540909e96b8eb9337e1793834e10f06890cd8e8e7bb1ba80cb13e7d50a863f227806c9ca74def4165fb - languageName: node - linkType: hard - "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" @@ -6227,17 +4385,6 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.7": - version: 3.1.9 - resolution: "ejs@npm:3.1.9" - dependencies: - jake: ^10.8.5 - bin: - ejs: bin/cli.js - checksum: af6f10eb815885ff8a8cfacc42c6b6cf87daf97a4884f87a30e0c3271fedd85d76a3a297d9c33a70e735b97ee632887f85e32854b9cdd3a2d97edf931519a35f - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.4.668": version: 1.4.681 resolution: "electron-to-chromium@npm:1.4.681" @@ -6245,42 +4392,6 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:^6.5.3, elliptic@npm:^6.5.5": - version: 6.5.5 - resolution: "elliptic@npm:6.5.5" - dependencies: - bn.js: ^4.11.9 - brorand: ^1.1.0 - hash.js: ^1.0.0 - hmac-drbg: ^1.0.1 - inherits: ^2.0.4 - minimalistic-assert: ^1.0.1 - minimalistic-crypto-utils: ^1.0.1 - checksum: ec9105e4469eb3b32b0ee2579756c888ddf3f99d259aa0d65fccb906ee877768aaf8880caae73e3e669c9a4adeb3eb1945703aa974ec5000d2d33a239f4567eb - languageName: node - linkType: hard - -"emittery@npm:^0.13.1": - version: 0.13.1 - resolution: "emittery@npm:0.13.1" - checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 - languageName: node - linkType: hard - -"emittery@npm:^1.0.1": - version: 1.0.3 - resolution: "emittery@npm:1.0.3" - checksum: c9e760431294a546dacc236e563ee29cc650374696ef5f824a465a4a7c584ca2c0046885a3e5d7cd3d9592713200c82f4a4ded11d0b49c06cb5bb587dedc46b4 - languageName: node - linkType: hard - -"emoji-regex@npm:^10.3.0": - version: 10.3.0 - resolution: "emoji-regex@npm:10.3.0" - checksum: 5da48edfeb9462fb1ae5495cff2d79129974c696853fb0ce952cbf560f29a2756825433bf51cfd5157ec7b9f93f46f31d712e896d63e3d8ac9c3832bdb45ab73 - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -6373,45 +4484,6 @@ __metadata: languageName: node linkType: hard -"esbuild-node-builtins@npm:^0.1.0": - version: 0.1.0 - resolution: "esbuild-node-builtins@npm:0.1.0" - dependencies: - assert: ^2.0.0 - browserify-zlib: ^0.2.0 - buffer: ^6.0.3 - console-browserify: ^1.2.0 - constants-browserify: ^1.0.0 - crypto-browserify: ^3.12.0 - domain-browser: ^4.19.0 - events: ^3.3.0 - https-browserify: ^1.0.0 - os-browserify: ^0.3.0 - path-browserify: ^1.0.1 - process: ^0.11.10 - punycode: ^2.1.1 - querystring-es3: ^0.2.1 - readable-stream: ^2.0.2 - stream-browserify: ^3.0.0 - stream-http: ^3.2.0 - string_decoder: ^1.3.0 - timers-browserify: ^2.0.12 - tslib: ^2.2.0 - tty-browserify: ^0.0.1 - url: ^0.11.0 - util: ^0.12.3 - vm-browserify: ^1.1.2 - checksum: 7428079335957e1c8f568e5a0e61b129e37fcd270b8553141ace0986bc36c44cf038b5837ba9e79444b875daed87855e33d6d29aec64d68a1e0115acf04d7bcd - languageName: node - linkType: hard - -"esbuild-plugin-node-polyfill@npm:^0.0.1": - version: 0.0.1 - resolution: "esbuild-plugin-node-polyfill@npm:0.0.1" - checksum: 78fb34b455afa4c306ee9d1f2b2e8cdfb8d65ee10d16e2487e4a381bf47690e76268c21f28cf085948cd67e38c4dbba143946c2bfde303abe27cee145442a184 - languageName: node - linkType: hard - "esbuild@npm:^0.19.3": version: 0.19.12 resolution: "esbuild@npm:0.19.12" @@ -6492,86 +4564,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.20.1": - version: 0.20.1 - resolution: "esbuild@npm:0.20.1" - dependencies: - "@esbuild/aix-ppc64": 0.20.1 - "@esbuild/android-arm": 0.20.1 - "@esbuild/android-arm64": 0.20.1 - "@esbuild/android-x64": 0.20.1 - "@esbuild/darwin-arm64": 0.20.1 - "@esbuild/darwin-x64": 0.20.1 - "@esbuild/freebsd-arm64": 0.20.1 - "@esbuild/freebsd-x64": 0.20.1 - "@esbuild/linux-arm": 0.20.1 - "@esbuild/linux-arm64": 0.20.1 - "@esbuild/linux-ia32": 0.20.1 - "@esbuild/linux-loong64": 0.20.1 - "@esbuild/linux-mips64el": 0.20.1 - "@esbuild/linux-ppc64": 0.20.1 - "@esbuild/linux-riscv64": 0.20.1 - "@esbuild/linux-s390x": 0.20.1 - "@esbuild/linux-x64": 0.20.1 - "@esbuild/netbsd-x64": 0.20.1 - "@esbuild/openbsd-x64": 0.20.1 - "@esbuild/sunos-x64": 0.20.1 - "@esbuild/win32-arm64": 0.20.1 - "@esbuild/win32-ia32": 0.20.1 - "@esbuild/win32-x64": 0.20.1 - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: af8b3c79e48d303501cac8551bf1ac5ebf5d86eebf2d1eb9d2a7018f4c5506bb120ed2454a013e3387e499de780a916bbffc9edd4ef132be403cd39771ace045 - languageName: node - linkType: hard - "escalade@npm:^3.1.1": version: 3.1.2 resolution: "escalade@npm:3.1.2" @@ -6593,13 +4585,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -6607,13 +4592,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^5.0.0": - version: 5.0.0 - resolution: "escape-string-regexp@npm:5.0.0" - checksum: 20daabe197f3cb198ec28546deebcf24b3dbb1a5a269184381b3116d12f0532e06007f4bc8da25669d6a7f8efb68db0758df4cd981f57bc5b57f521a3e12c59e - languageName: node - linkType: hard - "eslint-config-prettier@npm:^8.8.0": version: 8.10.0 resolution: "eslint-config-prettier@npm:8.10.0" @@ -6806,16 +4784,6 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - "esquery@npm:^1.4.2": version: 1.5.0 resolution: "esquery@npm:1.5.0" @@ -6848,7 +4816,7 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": +"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc @@ -6864,7 +4832,7 @@ __metadata: languageName: node linkType: hard -"esutils@npm:^2.0.2, esutils@npm:^2.0.3": +"esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 @@ -6894,92 +4862,27 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.2.0, events@npm:^3.3.0": +"events@npm:^3.2.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 languageName: node linkType: hard -"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": - version: 1.0.3 - resolution: "evp_bytestokey@npm:1.0.3" - dependencies: - md5.js: ^1.3.4 - node-gyp: latest - safe-buffer: ^5.1.1 - checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 - languageName: node - linkType: hard - -"execa@npm:^5.0.0": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.0 - human-signals: ^2.1.0 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.1 - onetime: ^5.1.2 - signal-exit: ^3.0.3 - strip-final-newline: ^2.0.0 - checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 - languageName: node - linkType: hard - -"execa@npm:^7.1.1": - version: 7.2.0 - resolution: "execa@npm:7.2.0" +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" dependencies: cross-spawn: ^7.0.3 - get-stream: ^6.0.1 - human-signals: ^4.3.0 + get-stream: ^8.0.1 + human-signals: ^5.0.0 is-stream: ^3.0.0 merge-stream: ^2.0.0 npm-run-path: ^5.1.0 onetime: ^6.0.0 - signal-exit: ^3.0.7 + signal-exit: ^4.1.0 strip-final-newline: ^3.0.0 - checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc - languageName: node - linkType: hard - -"execa@npm:^8.0.1": - version: 8.0.1 - resolution: "execa@npm:8.0.1" - dependencies: - cross-spawn: ^7.0.3 - get-stream: ^8.0.1 - human-signals: ^5.0.0 - is-stream: ^3.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^5.1.0 - onetime: ^6.0.0 - signal-exit: ^4.1.0 - strip-final-newline: ^3.0.0 - checksum: cac1bf86589d1d9b73bdc5dda65c52012d1a9619c44c526891956745f7b366ca2603d29fe3f7460bacc2b48c6eab5d6a4f7afe0534b31473d3708d1265545e1f - languageName: node - linkType: hard - -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - -"expect@npm:^29.0.0, expect@npm:^29.7.0": - version: 29.7.0 - resolution: "expect@npm:29.7.0" - dependencies: - "@jest/expect-utils": ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + checksum: cac1bf86589d1d9b73bdc5dda65c52012d1a9619c44c526891956745f7b366ca2603d29fe3f7460bacc2b48c6eab5d6a4f7afe0534b31473d3708d1265545e1f languageName: node linkType: hard @@ -6990,36 +4893,6 @@ __metadata: languageName: node linkType: hard -"extend-shallow@npm:^2.0.1": - version: 2.0.1 - resolution: "extend-shallow@npm:2.0.1" - dependencies: - is-extendable: ^0.1.0 - checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 - languageName: node - linkType: hard - -"extend@npm:~3.0.2": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 - languageName: node - linkType: hard - -"extsprintf@npm:1.3.0": - version: 1.3.0 - resolution: "extsprintf@npm:1.3.0" - checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 - languageName: node - linkType: hard - -"extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 - languageName: node - linkType: hard - "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -7027,7 +4900,7 @@ __metadata: languageName: node linkType: hard -"fast-diff@npm:^1.1.2, fast-diff@npm:^1.2.0": +"fast-diff@npm:^1.1.2": version: 1.3.0 resolution: "fast-diff@npm:1.3.0" checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 @@ -7061,7 +4934,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -7091,15 +4964,6 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 - languageName: node - linkType: hard - "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -7133,15 +4997,6 @@ __metadata: languageName: node linkType: hard -"figures@npm:^6.0.1": - version: 6.0.1 - resolution: "figures@npm:6.0.1" - dependencies: - is-unicode-supported: ^2.0.0 - checksum: 66c2b2d76eff324025181f205e2ad725e1ce50d5a24973282249aed4858878b8aa96d8286541c65564ef38ff447802c1320c6cd07645307211f3abe32458bee4 - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -7162,22 +5017,6 @@ __metadata: languageName: node linkType: hard -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 - languageName: node - linkType: hard - -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: ^5.0.1 - checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 - languageName: node - linkType: hard - "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -7205,13 +5044,6 @@ __metadata: languageName: node linkType: hard -"find-up-simple@npm:^1.0.0": - version: 1.0.0 - resolution: "find-up-simple@npm:1.0.0" - checksum: 91c3d51c1111b5eb4e6e6d71d21438f6571a37a69dc288d4222b98996756e2f472fa5393a4dddb5e1a84929405d87e86f4bdce798ba84ee513b79854960ec140 - languageName: node - linkType: hard - "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -7267,15 +5099,6 @@ __metadata: languageName: node linkType: hard -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: ^1.1.3 - checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 - languageName: node - linkType: hard - "foreground-child@npm:^3.1.0": version: 3.1.1 resolution: "foreground-child@npm:3.1.1" @@ -7286,13 +5109,6 @@ __metadata: languageName: node linkType: hard -"forever-agent@npm:~0.6.1": - version: 0.6.1 - resolution: "forever-agent@npm:0.6.1" - checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8 - languageName: node - linkType: hard - "form-data@npm:^4.0.0": version: 4.0.0 resolution: "form-data@npm:4.0.0" @@ -7304,17 +5120,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:~2.3.2": - version: 2.3.3 - resolution: "form-data@npm:2.3.3" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.6 - mime-types: ^2.1.12 - checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3 - languageName: node - linkType: hard - "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10" @@ -7388,7 +5193,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -7398,7 +5203,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": +"fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" dependencies: @@ -7414,23 +5219,6 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.2 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.1 - object-assign: ^4.1.1 - signal-exit: ^3.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.2 - checksum: 81296c00c7410cdd48f997800155fbead4f32e4f82109be0719c63edc8560e6579946cc8abd04205297640691ec26d21b578837fd13a4e96288ab4b40b1dc3e9 - languageName: node - linkType: hard - "generate-function@npm:^2.0.0": version: 2.3.1 resolution: "generate-function@npm:2.3.1" @@ -7463,13 +5251,6 @@ __metadata: languageName: node linkType: hard -"get-east-asian-width@npm:^1.0.0": - version: 1.2.0 - resolution: "get-east-asian-width@npm:1.2.0" - checksum: ea55f4d4a42c4b00d3d9be3111bc17eb0161f60ed23fc257c1390323bb780a592d7a8bdd550260fd4627dabee9a118cdfa3475ae54edca35ebcd3bdae04179e3 - languageName: node - linkType: hard - "get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": version: 2.0.2 resolution: "get-func-name@npm:2.0.2" @@ -7490,22 +5271,6 @@ __metadata: languageName: node linkType: hard -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - -"get-paths@npm:0.0.7": - version: 0.0.7 - resolution: "get-paths@npm:0.0.7" - dependencies: - pify: ^4.0.1 - checksum: a17edf61fb9934b8e58a7d8ce0d9702040b7020dda86e67ce088db865c21cb230f490f25f38064cebeb2c367abc2bf39a75db6acdfddf01da63a699a47f8aba4 - languageName: node - linkType: hard - "get-stdin@npm:^9.0.0": version: 9.0.0 resolution: "get-stdin@npm:9.0.0" @@ -7522,13 +5287,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad - languageName: node - linkType: hard - "get-stream@npm:^8.0.1": version: 8.0.1 resolution: "get-stream@npm:8.0.1" @@ -7536,15 +5294,6 @@ __metadata: languageName: node linkType: hard -"getpass@npm:^0.1.1": - version: 0.1.7 - resolution: "getpass@npm:0.1.7" - dependencies: - assert-plus: ^1.0.0 - checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -7577,7 +5326,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.3": +"glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.3.10 resolution: "glob@npm:10.3.10" dependencies: @@ -7636,20 +5385,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:^14.0.0": - version: 14.0.1 - resolution: "globby@npm:14.0.1" - dependencies: - "@sindresorhus/merge-streams": ^2.1.0 - fast-glob: ^3.3.2 - ignore: ^5.2.4 - path-type: ^5.0.0 - slash: ^5.1.0 - unicorn-magic: ^0.1.0 - checksum: 33568444289afb1135ad62d52d5e8412900cec620e3b6ece533afa46d004066f14b97052b643833d7cf4ee03e7fac571430130cde44c333df91a45d313105170 - languageName: node - linkType: hard - "globrex@npm:^0.1.2": version: 0.1.2 resolution: "globrex@npm:0.1.2" @@ -7666,7 +5401,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 @@ -7680,7 +5415,7 @@ __metadata: languageName: node linkType: hard -"handlebars@npm:^4.7.7, handlebars@npm:^4.7.8": +"handlebars@npm:^4.7.8": version: 4.7.8 resolution: "handlebars@npm:4.7.8" dependencies: @@ -7698,23 +5433,6 @@ __metadata: languageName: node linkType: hard -"har-schema@npm:^2.0.0": - version: 2.0.0 - resolution: "har-schema@npm:2.0.0" - checksum: d8946348f333fb09e2bf24cc4c67eabb47c8e1d1aa1c14184c7ffec1140a49ec8aa78aa93677ae452d71d5fc0fdeec20f0c8c1237291fc2bcb3f502a5d204f9b - languageName: node - linkType: hard - -"har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" - dependencies: - ajv: ^6.12.3 - har-schema: ^2.0.0 - checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 - languageName: node - linkType: hard - "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" @@ -7729,7 +5447,7 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.1": +"has-property-descriptors@npm:^1.0.1": version: 1.0.2 resolution: "has-property-descriptors@npm:1.0.2" dependencies: @@ -7752,7 +5470,7 @@ __metadata: languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": +"has-tostringtag@npm:^1.0.0": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" dependencies: @@ -7761,44 +5479,6 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - -"hash-base@npm:^3.0.0": - version: 3.1.0 - resolution: "hash-base@npm:3.1.0" - dependencies: - inherits: ^2.0.4 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc - languageName: node - linkType: hard - -"hash-base@npm:~3.0": - version: 3.0.4 - resolution: "hash-base@npm:3.0.4" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 - languageName: node - linkType: hard - -"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: ^2.0.3 - minimalistic-assert: ^1.0.1 - checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f - languageName: node - linkType: hard - "hasown@npm:^2.0.0": version: 2.0.1 resolution: "hasown@npm:2.0.1" @@ -7817,17 +5497,6 @@ __metadata: languageName: node linkType: hard -"hmac-drbg@npm:^1.0.1": - version: 1.0.1 - resolution: "hmac-drbg@npm:1.0.1" - dependencies: - hash.js: ^1.0.3 - minimalistic-assert: ^1.0.0 - minimalistic-crypto-utils: ^1.0.1 - checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 - languageName: node - linkType: hard - "hoist-non-react-statics@npm:^3.3.1": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -7916,34 +5585,6 @@ __metadata: languageName: node linkType: hard -"http-signature@npm:~1.2.0": - version: 1.2.0 - resolution: "http-signature@npm:1.2.0" - dependencies: - assert-plus: ^1.0.0 - jsprim: ^1.2.2 - sshpk: ^1.7.0 - checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c - languageName: node - linkType: hard - -"https-browserify@npm:^1.0.0": - version: 1.0.0 - resolution: "https-browserify@npm:1.0.0" - checksum: 09b35353e42069fde2435760d13f8a3fb7dd9105e358270e2e225b8a94f811b461edd17cb57594e5f36ec1218f121c160ddceeec6e8be2d55e01dcbbbed8cbae - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - "https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.2": version: 7.0.4 resolution: "https-proxy-agent@npm:7.0.4" @@ -7961,29 +5602,6 @@ __metadata: languageName: node linkType: hard -"human-interval@npm:^2.0.1": - version: 2.0.1 - resolution: "human-interval@npm:2.0.1" - dependencies: - numbered: ^1.1.0 - checksum: 8f1b37485f554d1f7a3fa2cefdbd9cee2df3ff2cfb86ae1db9f58f2db9d524d44863c2d291f04c810317f2fa7ceeda2188281985c7d65b3774d53c9e835ed55c - languageName: node - linkType: hard - -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 - languageName: node - linkType: hard - -"human-signals@npm:^4.3.0": - version: 4.3.1 - resolution: "human-signals@npm:4.3.1" - checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 - languageName: node - linkType: hard - "human-signals@npm:^5.0.0": version: 5.0.0 resolution: "human-signals@npm:5.0.0" @@ -8023,13 +5641,6 @@ __metadata: languageName: node linkType: hard -"ignore-by-default@npm:^2.1.0": - version: 2.1.0 - resolution: "ignore-by-default@npm:2.1.0" - checksum: 2b2df4622b6a07a3e91893987be8f060dc553f7736b67e72aa2312041c450a6fa8371733d03c42f45a02e47ec824e961c2fba63a3d94fc59cbd669220a5b0d7a - languageName: node - linkType: hard - "ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.1 resolution: "ignore@npm:5.3.1" @@ -8054,18 +5665,6 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -8080,13 +5679,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^5.0.0": - version: 5.0.0 - resolution: "indent-string@npm:5.0.0" - checksum: e466c27b6373440e6d84fbc19e750219ce25865cb82d578e41a6053d727e5520dc5725217d6eb1cc76005a1bb1696a0f106d84ce7ebda3033b963a38583fb3b3 - languageName: node - linkType: hard - "inflation@npm:^2.0.0": version: 2.1.0 resolution: "inflation@npm:2.1.0" @@ -8104,7 +5696,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -8118,13 +5710,6 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.4": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 - languageName: node - linkType: hard - "internmap@npm:1 - 2": version: 2.0.3 resolution: "internmap@npm:2.0.3" @@ -8132,23 +5717,6 @@ __metadata: languageName: node linkType: hard -"ioredis@npm:^5.3.2": - version: 5.3.2 - resolution: "ioredis@npm:5.3.2" - dependencies: - "@ioredis/commands": ^1.1.1 - cluster-key-slot: ^1.1.0 - debug: ^4.3.4 - denque: ^2.1.0 - lodash.defaults: ^4.2.0 - lodash.isarguments: ^3.1.0 - redis-errors: ^1.2.0 - redis-parser: ^3.0.0 - standard-as-callback: ^2.1.0 - checksum: 9a23559133e862a768778301efb68ae8c2af3c33562174b54a4c2d6574b976e85c75a4c34857991af733e35c48faf4c356e7daa8fb0a3543d85ff1768c8754bc - languageName: node - linkType: hard - "ip-address@npm:^9.0.5": version: 9.0.5 resolution: "ip-address@npm:9.0.5" @@ -8159,23 +5727,6 @@ __metadata: languageName: node linkType: hard -"irregular-plurals@npm:^3.3.0": - version: 3.5.0 - resolution: "irregular-plurals@npm:3.5.0" - checksum: 5b663091dc89155df7b2e9d053e8fb11941a0c4be95c4b6549ed3ea020489fdf4f75ea586c915b5b543704252679a5a6e8c6c3587da5ac3fc57b12da90a9aee7 - languageName: node - linkType: hard - -"is-arguments@npm:^1.0.4": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 - languageName: node - linkType: hard - "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -8199,20 +5750,13 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^1.1.5, is-buffer@npm:~1.1.1": +"is-buffer@npm:~1.1.1": version: 1.1.6 resolution: "is-buffer@npm:1.1.6" checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 languageName: node linkType: hard -"is-callable@npm:^1.1.3": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac - languageName: node - linkType: hard - "is-class-hotfix@npm:~0.0.6": version: 0.0.6 resolution: "is-class-hotfix@npm:0.0.6" @@ -8238,13 +5782,6 @@ __metadata: languageName: node linkType: hard -"is-extendable@npm:^0.1.0": - version: 0.1.1 - resolution: "is-extendable@npm:0.1.1" - checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 - languageName: node - linkType: hard - "is-extglob@npm:^1.0.0": version: 1.0.0 resolution: "is-extglob@npm:1.0.0" @@ -8266,20 +5803,6 @@ __metadata: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^4.0.0": - version: 4.0.0 - resolution: "is-fullwidth-code-point@npm:4.0.0" - checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - "is-generator-function@npm:^1.0.7": version: 1.0.10 resolution: "is-generator-function@npm:1.0.10" @@ -8354,16 +5877,6 @@ __metadata: languageName: node linkType: hard -"is-nan@npm:^1.3.2": - version: 1.3.2 - resolution: "is-nan@npm:1.3.2" - dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - checksum: 5dfadcef6ad12d3029d43643d9800adbba21cf3ce2ec849f734b0e14ee8da4070d82b15fdb35138716d02587c6578225b9a22779cab34888a139cc43e4e3610a - languageName: node - linkType: hard - "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -8378,20 +5891,6 @@ __metadata: languageName: node linkType: hard -"is-plain-object@npm:^5.0.0": - version: 5.0.0 - resolution: "is-plain-object@npm:5.0.0" - checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c - languageName: node - linkType: hard - -"is-promise@npm:^4.0.0": - version: 4.0.0 - resolution: "is-promise@npm:4.0.0" - checksum: 0b46517ad47b00b6358fd6553c83ec1f6ba9acd7ffb3d30a0bf519c5c69e7147c132430452351b8a9fc198f8dd6c4f76f8e6f5a7f100f8c77d57d9e0f4261a8a - languageName: node - linkType: hard - "is-property@npm:^1.0.0, is-property@npm:^1.0.2": version: 1.0.2 resolution: "is-property@npm:1.0.2" @@ -8413,22 +5912,6 @@ __metadata: languageName: node linkType: hard -"is-string-and-not-blank@npm:^0.0.2": - version: 0.0.2 - resolution: "is-string-and-not-blank@npm:0.0.2" - dependencies: - is-string-blank: ^1.0.1 - checksum: 9b0fff4f0974ffaceb382dcf012587d1ad5d5013d7260a4e85621b67fbcb29ca906bcd607fe71bdd72c642f7b56b5b9e779f9d54224b826da9aa48b2003b6113 - languageName: node - linkType: hard - -"is-string-blank@npm:^1.0.1": - version: 1.0.1 - resolution: "is-string-blank@npm:1.0.1" - checksum: 00a0955c2bac08cc84f9f878d2a3fdba86997ac23c0b661e50f39efba635444d9cec84237337200be9a4e07234069318498592817614525cd959ae0d43df2151 - languageName: node - linkType: hard - "is-type-of@npm:^1.2.1": version: 1.4.0 resolution: "is-type-of@npm:1.4.0" @@ -8440,29 +5923,6 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.3": - version: 1.1.13 - resolution: "is-typed-array@npm:1.1.13" - dependencies: - which-typed-array: ^1.1.14 - checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 - languageName: node - linkType: hard - -"is-typedarray@npm:~1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 - languageName: node - linkType: hard - -"is-unicode-supported@npm:^2.0.0": - version: 2.0.0 - resolution: "is-unicode-supported@npm:2.0.0" - checksum: 000b80639dedaf59a385f1c0a57f97a4d1435e0723716f24cc19ad94253a7a0a9f838bdc9ac49b10a29ac93b01f52ae9b2ed358a8876caf1eb74d73b4ede92b2 - languageName: node - linkType: hard - "is-valid-path@npm:^0.1.1": version: 0.1.1 resolution: "is-valid-path@npm:0.1.1" @@ -8472,13 +5932,6 @@ __metadata: languageName: node linkType: hard -"is-whitespace@npm:^0.3.0": - version: 0.3.0 - resolution: "is-whitespace@npm:0.3.0" - checksum: dac8fc9a9b797afeef703f625269601715552883790d1385d6bb27dd04ffdafd5fddca8f2d85ee96913850211595da2ba483dac1f166829c4078fb58ce815140 - languageName: node - linkType: hard - "is-wsl@npm:^3.1.0": version: 3.1.0 resolution: "is-wsl@npm:3.1.0" @@ -8488,13 +5941,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -8523,20 +5969,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^6.3.0 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.1": +"istanbul-lib-instrument@npm:^6.0.1": version: 6.0.2 resolution: "istanbul-lib-instrument@npm:6.0.2" dependencies: @@ -8560,7 +5993,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-source-maps@npm:^4.0.0, istanbul-lib-source-maps@npm:^4.0.1": +"istanbul-lib-source-maps@npm:^4.0.1": version: 4.0.1 resolution: "istanbul-lib-source-maps@npm:4.0.1" dependencies: @@ -8571,7 +6004,7 @@ __metadata: languageName: node linkType: hard -"istanbul-reports@npm:^3.1.3, istanbul-reports@npm:^3.1.6": +"istanbul-reports@npm:^3.1.6": version: 3.1.7 resolution: "istanbul-reports@npm:3.1.7" dependencies: @@ -8590,471 +6023,18 @@ __metadata: dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 - languageName: node - linkType: hard - -"jake@npm:^10.8.5": - version: 10.8.7 - resolution: "jake@npm:10.8.7" - dependencies: - async: ^3.2.3 - chalk: ^4.0.2 - filelist: ^1.0.4 - minimatch: ^3.1.2 - bin: - jake: bin/cli.js - checksum: a23fd2273fb13f0d0d845502d02c791fd55ef5c6a2d207df72f72d8e1eac6d2b8ffa6caf660bc8006b3242e0daaa88a3ecc600194d72b5c6016ad56e9cd43553 - languageName: node - linkType: hard - -"jdenticon@npm:3.2.0": - version: 3.2.0 - resolution: "jdenticon@npm:3.2.0" - dependencies: - canvas-renderer: ~2.2.0 - bin: - jdenticon: bin/jdenticon.js - checksum: cdc0651532f38e02c8e6661f0185735dcd29b7cd17677c69be31916ed38d81ded8bc749deb79925ad8aaf68da0b7a49f0835879c70a7dea042caa6c47faaebee - languageName: node - linkType: hard - -"jest-changed-files@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-changed-files@npm:29.7.0" - dependencies: - execa: ^5.0.0 - jest-util: ^29.7.0 - p-limit: ^3.1.0 - checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 - languageName: node - linkType: hard - -"jest-circus@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-circus@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^1.0.0 - is-generator-fn: ^2.0.0 - jest-each: ^29.7.0 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - p-limit: ^3.1.0 - pretty-format: ^29.7.0 - pure-rand: ^6.0.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 - languageName: node - linkType: hard - -"jest-cli@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-cli@npm:29.7.0" - dependencies: - "@jest/core": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - create-jest: ^29.7.0 - exit: ^0.1.2 - import-local: ^3.0.2 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 - languageName: node - linkType: hard - -"jest-config@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-config@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.7.0 - "@jest/types": ^29.6.3 - babel-jest: ^29.7.0 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-circus: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-get-type: ^29.6.3 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-runner: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^29.7.0 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff - languageName: node - linkType: hard - -"jest-diff@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.6.3 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 - languageName: node - linkType: hard - -"jest-docblock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-docblock@npm:29.7.0" - dependencies: - detect-newline: ^3.0.0 - checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 - languageName: node - linkType: hard - -"jest-each@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-each@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - jest-get-type: ^29.6.3 - jest-util: ^29.7.0 - pretty-format: ^29.7.0 - checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c - languageName: node - linkType: hard - -"jest-environment-node@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-node@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 - languageName: node - linkType: hard - -"jest-haste-map@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-haste-map@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 - languageName: node - linkType: hard - -"jest-leak-detector@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-leak-detector@npm:29.7.0" - dependencies: - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-matcher-utils@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd - languageName: node - linkType: hard - -"jest-message-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-message-util@npm:29.7.0" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.6.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 - languageName: node - linkType: hard - -"jest-mock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-mock@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-util: ^29.7.0 - checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 - languageName: node - linkType: hard - -"jest-regex-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-regex-util@npm:29.6.3" - checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve-dependencies@npm:29.7.0" - dependencies: - jest-regex-util: ^29.6.3 - jest-snapshot: ^29.7.0 - checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 - languageName: node - linkType: hard - -"jest-resolve@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-pnp-resolver: ^1.2.2 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - resolve: ^1.20.0 - resolve.exports: ^2.0.0 - slash: ^3.0.0 - checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 - languageName: node - linkType: hard - -"jest-runner@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runner@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/environment": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.13.1 - graceful-fs: ^4.2.9 - jest-docblock: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-leak-detector: ^29.7.0 - jest-message-util: ^29.7.0 - jest-resolve: ^29.7.0 - jest-runtime: ^29.7.0 - jest-util: ^29.7.0 - jest-watcher: ^29.7.0 - jest-worker: ^29.7.0 - p-limit: ^3.1.0 - source-map-support: 0.5.13 - checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb - languageName: node - linkType: hard - -"jest-runtime@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runtime@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/globals": ^29.7.0 - "@jest/source-map": ^29.6.3 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e - languageName: node - linkType: hard - -"jest-snapshot@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-snapshot@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-jsx": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^29.7.0 - graceful-fs: ^4.2.9 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - natural-compare: ^1.4.0 - pretty-format: ^29.7.0 - semver: ^7.5.3 - checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad - languageName: node - linkType: hard - -"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-util@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca - languageName: node - linkType: hard - -"jest-validate@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-validate@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^29.6.3 - leven: ^3.1.0 - pretty-format: ^29.7.0 - checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae - languageName: node - linkType: hard - -"jest-watcher@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-watcher@npm:29.7.0" - dependencies: - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.13.1 - jest-util: ^29.7.0 - string-length: ^4.0.1 - checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f - languageName: node - linkType: hard - -"jest-worker@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-worker@npm:29.7.0" - dependencies: - "@types/node": "*" - jest-util: ^29.7.0 - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 languageName: node linkType: hard -"jest@npm:^29.7.0": - version: 29.7.0 - resolution: "jest@npm:29.7.0" +"jdenticon@npm:3.2.0": + version: 3.2.0 + resolution: "jdenticon@npm:3.2.0" dependencies: - "@jest/core": ^29.7.0 - "@jest/types": ^29.6.3 - import-local: ^3.0.2 - jest-cli: ^29.7.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + canvas-renderer: ~2.2.0 bin: - jest: bin/jest.js - checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b + jdenticon: bin/jdenticon.js + checksum: cdc0651532f38e02c8e6661f0185735dcd29b7cd17677c69be31916ed38d81ded8bc749deb79925ad8aaf68da0b7a49f0835879c70a7dea042caa6c47faaebee languageName: node linkType: hard @@ -9065,37 +6045,6 @@ __metadata: languageName: node linkType: hard -"js-beautify@npm:^1.6.12": - version: 1.15.1 - resolution: "js-beautify@npm:1.15.1" - dependencies: - config-chain: ^1.1.13 - editorconfig: ^1.0.4 - glob: ^10.3.3 - js-cookie: ^3.0.5 - nopt: ^7.2.0 - bin: - css-beautify: js/bin/css-beautify.js - html-beautify: js/bin/html-beautify.js - js-beautify: js/bin/js-beautify.js - checksum: 0428ea358cdf169da15e11a8b63f13845ee39c707f3718a3ec515eb89d585544525aa8ba5306503431c61e33e1fbfebdf2af41c461e512619d8a2f8664d6c0c4 - languageName: node - linkType: hard - -"js-cookie@npm:^3.0.5": - version: 3.0.5 - resolution: "js-cookie@npm:3.0.5" - checksum: 2dbd2809c6180fbcf060c6957cb82dbb47edae0ead6bd71cbeedf448aa6b6923115003b995f7d3e3077bfe2cb76295ea6b584eb7196cca8ba0a09f389f64967a - languageName: node - linkType: hard - -"js-string-escape@npm:^1.0.1": - version: 1.0.1 - resolution: "js-string-escape@npm:1.0.1" - checksum: f11e0991bf57e0c183b55c547acec85bd2445f043efc9ea5aa68b41bd2a3e7d3ce94636cb233ae0d84064ba4c1a505d32e969813c5b13f81e7d4be12c59256fe - languageName: node - linkType: hard - "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -9110,18 +6059,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c - languageName: node - linkType: hard - "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -9140,13 +6077,6 @@ __metadata: languageName: node linkType: hard -"jsbn@npm:~0.1.0": - version: 0.1.1 - resolution: "jsbn@npm:0.1.1" - checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 - languageName: node - linkType: hard - "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -9193,13 +6123,6 @@ __metadata: languageName: node linkType: hard -"json-schema@npm:0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 - languageName: node - linkType: hard - "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -9207,7 +6130,7 @@ __metadata: languageName: node linkType: hard -"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": +"json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee @@ -9249,18 +6172,6 @@ __metadata: languageName: node linkType: hard -"jsprim@npm:^1.2.2": - version: 1.4.2 - resolution: "jsprim@npm:1.4.2" - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a - languageName: node - linkType: hard - "jwt-decode@npm:^3.1.2": version: 3.1.2 resolution: "jwt-decode@npm:3.1.2" @@ -9293,22 +6204,6 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^3.0.2": - version: 3.2.2 - resolution: "kind-of@npm:3.2.2" - dependencies: - is-buffer: ^1.1.5 - checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 - languageName: node - linkType: hard - -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - "koa-bodyparser@npm:^4.3.0, koa-bodyparser@npm:^4.4.1": version: 4.4.1 resolution: "koa-bodyparser@npm:4.4.1" @@ -9368,20 +6263,7 @@ __metadata: languageName: node linkType: hard -"koa-router@npm:^10.0.0": - version: 10.1.1 - resolution: "koa-router@npm:10.1.1" - dependencies: - debug: ^4.1.1 - http-errors: ^1.7.3 - koa-compose: ^4.1.0 - methods: ^1.1.2 - path-to-regexp: ^6.1.0 - checksum: 65e6cd4a7f8a4d98c665b00ee4c2c05340cb38ca035590ce71c23a25c0a01f6d2434d9a68366d7c218af9c94e5d8e20c7fe9e7f7dfbb98d69b11b5ae3246aaf8 - languageName: node - linkType: hard - -"koa-send@npm:^5.0.0, koa-send@npm:^5.0.1": +"koa-send@npm:^5.0.0": version: 5.0.1 resolution: "koa-send@npm:5.0.1" dependencies: @@ -9420,26 +6302,6 @@ __metadata: languageName: node linkType: hard -"koa-views@npm:^7.0.1": - version: 7.0.2 - resolution: "koa-views@npm:7.0.2" - dependencies: - consolidate: ^0.16.0 - debug: ^4.1.0 - get-paths: 0.0.7 - koa-send: ^5.0.0 - mz: ^2.4.0 - pretty: ^2.0.0 - resolve-path: ^1.4.0 - peerDependencies: - "@types/koa": ^2.13.1 - peerDependenciesMeta: - "@types/koa": - optional: true - checksum: e591a131de09cf2676ae0492dabf420015404cd1198092a2aa217118c5e7df5da848f49c658f46af172028a508cecbdb0a81e45c5acf5cf40c2baf7c9d08675e - languageName: node - linkType: hard - "koa2-cors@npm:^2.0.6": version: 2.0.6 resolution: "koa2-cors@npm:2.0.6" @@ -9460,7 +6322,7 @@ __metadata: languageName: node linkType: hard -"koa@npm:^2.13.1, koa@npm:^2.13.4, koa@npm:^2.15.0": +"koa@npm:^2.13.4, koa@npm:^2.15.0": version: 2.15.0 resolution: "koa@npm:2.15.0" dependencies: @@ -9505,13 +6367,6 @@ __metadata: languageName: node linkType: hard -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -9529,13 +6384,6 @@ __metadata: languageName: node linkType: hard -"load-json-file@npm:^7.0.1": - version: 7.0.1 - resolution: "load-json-file@npm:7.0.1" - checksum: a560288da6891778321ef993e4bdbdf05374a4f3a3aeedd5ba6b64672798c830d748cfc59a2ec9891a3db30e78b3d04172e0dcb0d4828168289a393147ca0e74 - languageName: node - linkType: hard - "local-pkg@npm:^0.5.0": version: 0.5.0 resolution: "local-pkg@npm:0.5.0" @@ -9564,69 +6412,6 @@ __metadata: languageName: node linkType: hard -"lodash-es@npm:^4.17.15": - version: 4.17.21 - resolution: "lodash-es@npm:4.17.21" - checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 - languageName: node - linkType: hard - -"lodash._baseiteratee@npm:~4.7.0": - version: 4.7.0 - resolution: "lodash._baseiteratee@npm:4.7.0" - dependencies: - lodash._stringtopath: ~4.8.0 - checksum: 814a7125b9e2fa7e436c4402eae842a200189e2839b56bd6cde7cd0a3628b60842f5d39a9f5dceaf8766669b2e4a17a36ce2a213d1d6a891c1bef8a6bda36ea9 - languageName: node - linkType: hard - -"lodash._basetostring@npm:~4.12.0": - version: 4.12.0 - resolution: "lodash._basetostring@npm:4.12.0" - checksum: ccaf83827f86be5c9daeb7b939f761d6a43f0de0781bc3b6772fcb8568fbcbfa1e1082c66e5e12dd23e00ac40a18349c5a793a6a552e3574cbbcb3e1545fcb4c - languageName: node - linkType: hard - -"lodash._baseuniq@npm:~4.6.0": - version: 4.6.0 - resolution: "lodash._baseuniq@npm:4.6.0" - dependencies: - lodash._createset: ~4.0.0 - lodash._root: ~3.0.0 - checksum: 8c16fe2e80716b18c2f28bbcc902768141d432b0b98e03b30a2fba6a097377fabdc8753da232568375d2aa9502dc6b3a390200aa1467d2f685a582a46a271936 - languageName: node - linkType: hard - -"lodash._createset@npm:~4.0.0": - version: 4.0.3 - resolution: "lodash._createset@npm:4.0.3" - checksum: fb4450fbf4846aa7b420837ee44400b88664e28499388b7e04b4db38adca1305915f68a245fb2a87e031e7f440b997de4f360de6dea2712952520e97c7898de1 - languageName: node - linkType: hard - -"lodash._root@npm:~3.0.0": - version: 3.0.1 - resolution: "lodash._root@npm:3.0.1" - checksum: 3e12c6f409ae13164a8db358f44a691f1e038dad4e25463802980d0ed641ed118c147b65657501c51778c885422b913264dfbe33ec0c5d676443dd630a7e685a - languageName: node - linkType: hard - -"lodash._stringtopath@npm:~4.8.0": - version: 4.8.0 - resolution: "lodash._stringtopath@npm:4.8.0" - dependencies: - lodash._basetostring: ~4.12.0 - checksum: 00663b317796333e6315ebb4e8b590e68845de10d5d25c7585751fd9d28adf3e60e1ce85a6fbb6a0d440447c841465b91877e761239e358231eed2f52f0a5472 - languageName: node - linkType: hard - -"lodash.defaults@npm:^4.2.0": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 84923258235592c8886e29de5491946ff8c2ae5c82a7ac5cddd2e3cb697e6fbdfbbb6efcca015795c86eec2bb953a5a2ee4016e3735a3f02720428a40efbb8f1 - languageName: node - linkType: hard - "lodash.get@npm:^4.4.2": version: 4.4.2 resolution: "lodash.get@npm:4.4.2" @@ -9634,13 +6419,6 @@ __metadata: languageName: node linkType: hard -"lodash.isarguments@npm:^3.1.0": - version: 3.1.0 - resolution: "lodash.isarguments@npm:3.1.0" - checksum: ae1526f3eb5c61c77944b101b1f655f846ecbedcb9e6b073526eba6890dc0f13f09f72e11ffbf6540b602caee319af9ac363d6cdd6be41f4ee453436f04f13b5 - languageName: node - linkType: hard - "lodash.isequal@npm:^4.5.0": version: 4.5.0 resolution: "lodash.isequal@npm:4.5.0" @@ -9648,13 +6426,6 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:4.x": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 - languageName: node - linkType: hard - "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -9669,17 +6440,7 @@ __metadata: languageName: node linkType: hard -"lodash.uniqby@npm:4.5.0": - version: 4.5.0 - resolution: "lodash.uniqby@npm:4.5.0" - dependencies: - lodash._baseiteratee: ~4.7.0 - lodash._baseuniq: ~4.6.0 - checksum: 40a4fdd4c31323fcb6db91ec3124020333212ca1f13e75cc9939decdd33e8b176d204fb277be36a51a855c2c90e14d67932b3b130b2f0eedc729e4cb9cdcaed1 - languageName: node - linkType: hard - -"lodash@npm:^4.17.11, lodash@npm:^4.17.13, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.15": +"lodash@npm:^4.17.13, lodash@npm:^4.17.21, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -9752,14 +6513,7 @@ __metadata: languageName: node linkType: hard -"lunr@npm:^2.3.9": - version: 2.3.9 - resolution: "lunr@npm:2.3.9" - checksum: 176719e24fcce7d3cf1baccce9dd5633cd8bdc1f41ebe6a180112e5ee99d80373fe2454f5d4624d437e5a8319698ca6837b9950566e15d2cae5f2a543a3db4b8 - languageName: node - linkType: hard - -"luxon@npm:^3.2.1, luxon@npm:~3.4.0": +"luxon@npm:~3.4.0": version: 3.4.4 resolution: "luxon@npm:3.4.4" checksum: 36c1f99c4796ee4bfddf7dc94fa87815add43ebc44c8934c924946260a58512f0fd2743a629302885df7f35ccbd2d13f178c15df046d0e3b6eb71db178f1c60c @@ -9786,7 +6540,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": +"make-dir@npm:^3.0.2": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: @@ -9804,7 +6558,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:1.x, make-error@npm:^1.1.1": +"make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -9830,33 +6584,6 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 - languageName: node - linkType: hard - -"marked@npm:^4.3.0": - version: 4.3.0 - resolution: "marked@npm:4.3.0" - bin: - marked: bin/marked.js - checksum: 0db6817893952c3ec710eb9ceafb8468bf5ae38cb0f92b7b083baa13d70b19774674be04db5b817681fa7c5c6a088f61300815e4dd75a59696f4716ad69f6260 - languageName: node - linkType: hard - -"matcher@npm:^5.0.0": - version: 5.0.0 - resolution: "matcher@npm:5.0.0" - dependencies: - escape-string-regexp: ^5.0.0 - checksum: 28f191c2d23fee0f6f32fd0181d9fe173b0ab815a919edba55605438a2f9fa40372e002574a1b17add981b0a8669c75bc6194318d065ed2dceffd8b160c38118 - languageName: node - linkType: hard - "matrix-events-sdk@npm:0.0.1": version: 0.0.1 resolution: "matrix-events-sdk@npm:0.0.1" @@ -9896,26 +6623,6 @@ __metadata: languageName: node linkType: hard -"md5-hex@npm:^3.0.1": - version: 3.0.1 - resolution: "md5-hex@npm:3.0.1" - dependencies: - blueimp-md5: ^2.10.0 - checksum: 6799a19e8bdd3e0c2861b94c1d4d858a89220488d7885c1fa236797e367d0c2e5f2b789e05309307083503f85be3603a9686a5915568a473137d6b4117419cc2 - languageName: node - linkType: hard - -"md5.js@npm:^1.3.4": - version: 1.3.5 - resolution: "md5.js@npm:1.3.5" - dependencies: - hash-base: ^3.0.0 - inherits: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c - languageName: node - linkType: hard - "md5@npm:~2.2.0": version: 2.2.1 resolution: "md5@npm:2.2.1" @@ -9934,15 +6641,6 @@ __metadata: languageName: node linkType: hard -"memoize@npm:^10.0.0": - version: 10.0.0 - resolution: "memoize@npm:10.0.0" - dependencies: - mimic-function: ^5.0.0 - checksum: a052912fcd4f1e258438abd800c15c6be6cc7123d3affbbcc438e95c11c5d7e0209882f8e58938e92d62a435b839cc359f69674b455d906596a484cbbe29727d - languageName: node - linkType: hard - "memory-cache@npm:~0.2.0": version: 0.2.0 resolution: "memory-cache@npm:0.2.0" @@ -9985,7 +6683,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": +"micromatch@npm:^4.0.4": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies: @@ -9995,18 +6693,6 @@ __metadata: languageName: node linkType: hard -"miller-rabin@npm:^4.0.0": - version: 4.0.1 - resolution: "miller-rabin@npm:4.0.1" - dependencies: - bn.js: ^4.0.0 - brorand: ^1.0.1 - bin: - miller-rabin: bin/miller-rabin - checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece - languageName: node - linkType: hard - "mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -10014,7 +6700,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -10023,13 +6709,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a - languageName: node - linkType: hard - "mimic-fn@npm:^4.0.0": version: 4.0.0 resolution: "mimic-fn@npm:4.0.0" @@ -10037,36 +6716,6 @@ __metadata: languageName: node linkType: hard -"mimic-function@npm:^5.0.0": - version: 5.0.0 - resolution: "mimic-function@npm:5.0.0" - checksum: 1cb53bc250e4824544b89322f047ef37b2f70327cac67a9e5d64a192ac2b810dabc6a6e76e528751aae8558adf618de91fa0b69cec8514f96ee3cf1db81c4508 - languageName: node - linkType: hard - -"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 - languageName: node - linkType: hard - -"minimalistic-crypto-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-crypto-utils@npm:1.0.1" - checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed - languageName: node - linkType: hard - -"minimatch@npm:9.0.1": - version: 9.0.1 - resolution: "minimatch@npm:9.0.1" - dependencies: - brace-expansion: ^2.0.1 - checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3 - languageName: node - linkType: hard - "minimatch@npm:9.0.3, minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -10085,15 +6734,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 - languageName: node - linkType: hard - "minimist@npm:^1.2.5": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -10423,56 +7063,13 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": +"ms@npm:2.1.3, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard -"msgpackr-extract@npm:^3.0.2": - version: 3.0.2 - resolution: "msgpackr-extract@npm:3.0.2" - dependencies: - "@msgpackr-extract/msgpackr-extract-darwin-arm64": 3.0.2 - "@msgpackr-extract/msgpackr-extract-darwin-x64": 3.0.2 - "@msgpackr-extract/msgpackr-extract-linux-arm": 3.0.2 - "@msgpackr-extract/msgpackr-extract-linux-arm64": 3.0.2 - "@msgpackr-extract/msgpackr-extract-linux-x64": 3.0.2 - "@msgpackr-extract/msgpackr-extract-win32-x64": 3.0.2 - node-gyp: latest - node-gyp-build-optional-packages: 5.0.7 - dependenciesMeta: - "@msgpackr-extract/msgpackr-extract-darwin-arm64": - optional: true - "@msgpackr-extract/msgpackr-extract-darwin-x64": - optional: true - "@msgpackr-extract/msgpackr-extract-linux-arm": - optional: true - "@msgpackr-extract/msgpackr-extract-linux-arm64": - optional: true - "@msgpackr-extract/msgpackr-extract-linux-x64": - optional: true - "@msgpackr-extract/msgpackr-extract-win32-x64": - optional: true - bin: - download-msgpackr-prebuilds: bin/download-prebuilds.js - checksum: 5adb809b965bac41c310e60373d54c955fe78e4d134ab036d0f9ee5b322cec0a739878d395e17c1ac82d840705896b2dafae6a8cc04ad34c14d2de4b06b58330 - languageName: node - linkType: hard - -"msgpackr@npm:^1.10.1": - version: 1.10.1 - resolution: "msgpackr@npm:1.10.1" - dependencies: - msgpackr-extract: ^3.0.2 - dependenciesMeta: - msgpackr-extract: - optional: true - checksum: e422d18b01051598b23701eebeb4b9e2c686b9c7826b20f564724837ba2b5cd4af74c91a549eaeaf8186645cc95e8196274a4a19442aa3286ac611b98069c194 - languageName: node - linkType: hard - "muggle-string@npm:^0.3.1": version: 0.3.1 resolution: "muggle-string@npm:0.3.1" @@ -10480,24 +7077,6 @@ __metadata: languageName: node linkType: hard -"mz@npm:^2.4.0": - version: 2.7.0 - resolution: "mz@npm:2.7.0" - dependencies: - any-promise: ^1.0.0 - object-assign: ^4.0.1 - thenify-all: ^1.0.0 - checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 - languageName: node - linkType: hard - -"nanoclone@npm:^0.2.1": - version: 0.2.1 - resolution: "nanoclone@npm:0.2.1" - checksum: 96b2954e22f70561f41e20d69856266c65583c2a441dae108f1dc71b716785d2c8038dac5f1d5e92b117aed3825f526b53139e2e5d6e6db8a77cfa35b3b8bf40 - languageName: node - linkType: hard - "nanoid@npm:^3.3.6, nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" @@ -10555,13 +7134,6 @@ __metadata: languageName: node linkType: hard -"node-abort-controller@npm:^3.1.1": - version: 3.1.1 - resolution: "node-abort-controller@npm:3.1.1" - checksum: 2c340916af9710328b11c0828223fc65ba320e0d082214a211311bf64c2891028e42ef276b9799188c4ada9e6e1c54cf7a0b7c05dd9d59fcdc8cd633304c8047 - languageName: node - linkType: hard - "node-domexception@npm:^1.0.0": version: 1.0.0 resolution: "node-domexception@npm:1.0.0" @@ -10569,7 +7141,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:3.3.2, node-fetch@npm:^3.3.2": +"node-fetch@npm:^3.3.2": version: 3.3.2 resolution: "node-fetch@npm:3.3.2" dependencies: @@ -10580,42 +7152,6 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.7": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: ^5.0.0 - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 - languageName: node - linkType: hard - -"node-gyp-build-optional-packages@npm:5.0.7": - version: 5.0.7 - resolution: "node-gyp-build-optional-packages@npm:5.0.7" - bin: - node-gyp-build-optional-packages: bin.js - node-gyp-build-optional-packages-optional: optional.js - node-gyp-build-optional-packages-test: build-test.js - checksum: bcb4537af15bcb3811914ea0db8f69284ca10db1cc7543a167a4c41ae4b9b5044b133f789fdadad0b7adc6931f6ae7def3c75b0bc7b05836881aae52400163e6 - languageName: node - linkType: hard - -"node-gyp-build@npm:^4.2.2": - version: 4.8.0 - resolution: "node-gyp-build@npm:4.8.0" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: b82a56f866034b559dd3ed1ad04f55b04ae381b22ec2affe74b488d1582473ca6e7f85fccf52da085812d3de2b0bf23109e752a57709ac7b9963951c710fea40 - languageName: node - linkType: hard - "node-gyp@npm:latest": version: 10.0.1 resolution: "node-gyp@npm:10.0.1" @@ -10636,13 +7172,6 @@ __metadata: languageName: node linkType: hard -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - "node-releases@npm:^2.0.14": version: 2.0.14 resolution: "node-releases@npm:2.0.14" @@ -10670,25 +7199,7 @@ __metadata: languageName: node linkType: hard -"nofilter@npm:^3.1.0": - version: 3.1.0 - resolution: "nofilter@npm:3.1.0" - checksum: 58aa85a5b4b35cbb6e42de8a8591c5e338061edc9f3e7286f2c335e9e9b9b8fa7c335ae45daa8a1f3433164dc0b9a3d187fa96f9516e04a17a1f9ce722becc4f - languageName: node - linkType: hard - -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" - dependencies: - abbrev: 1 - bin: - nopt: bin/nopt.js - checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f - languageName: node - linkType: hard - -"nopt@npm:^7.0.0, nopt@npm:^7.2.0": +"nopt@npm:^7.0.0": version: 7.2.0 resolution: "nopt@npm:7.2.0" dependencies: @@ -10729,15 +7240,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: ^3.0.0 - checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 - languageName: node - linkType: hard - "npm-run-path@npm:^5.1.0": version: 5.3.0 resolution: "npm-run-path@npm:5.3.0" @@ -10747,33 +7249,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: ^2.0.0 - console-control-strings: ^1.1.0 - gauge: ^3.0.0 - set-blocking: ^2.0.0 - checksum: 516b2663028761f062d13e8beb3f00069c5664925871a9b57989642ebe09f23ab02145bf3ab88da7866c4e112cafff72401f61a672c7c8a20edc585a7016ef5f - languageName: node - linkType: hard - -"numbered@npm:^1.1.0": - version: 1.1.0 - resolution: "numbered@npm:1.1.0" - checksum: cdc238990fe29818cb603ac8d4050ff82a05b63e10d8848d1ff1e315231e94813c48b405e651b22d32edc8ccf1f323920d1182ea02c081f11d94ea22b1f8c17a - languageName: node - linkType: hard - -"oauth-sign@npm:~0.9.0": - version: 0.9.0 - resolution: "oauth-sign@npm:0.9.0" - checksum: 8f5497a127967866a3c67094c21efd295e46013a94e6e828573c62220e9af568cc1d2d04b16865ba583e430510fa168baf821ea78f355146d8ed7e350fc44c64 - languageName: node - linkType: hard - -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -10787,35 +7263,6 @@ __metadata: languageName: node linkType: hard -"object-is@npm:^1.1.5": - version: 1.1.6 - resolution: "object-is@npm:1.1.6" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - checksum: 3ea22759967e6f2380a2cbbd0f737b42dc9ddb2dfefdb159a1b927fea57335e1b058b564bfa94417db8ad58cddab33621a035de6f5e5ad56d89f2dd03e66c6a1 - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a - languageName: node - linkType: hard - -"object.assign@npm:^4.1.4": - version: 4.1.5 - resolution: "object.assign@npm:4.1.5" - dependencies: - call-bind: ^1.0.5 - define-properties: ^1.2.1 - has-symbols: ^1.0.3 - object-keys: ^1.1.1 - checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 - languageName: node - linkType: hard - "oidc-client-ts@npm:^2.2.4": version: 2.4.0 resolution: "oidc-client-ts@npm:2.4.0" @@ -10853,15 +7300,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: ^2.1.0 - checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 - languageName: node - linkType: hard - "onetime@npm:^6.0.0": version: 6.0.0 resolution: "onetime@npm:6.0.0" @@ -10919,20 +7357,6 @@ __metadata: languageName: node linkType: hard -"os-browserify@npm:^0.3.0": - version: 0.3.0 - resolution: "os-browserify@npm:0.3.0" - checksum: 16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 - languageName: node - linkType: hard - "p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" @@ -10942,7 +7366,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": +"p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -10987,13 +7411,6 @@ __metadata: languageName: node linkType: hard -"p-map@npm:^7.0.1": - version: 7.0.1 - resolution: "p-map@npm:7.0.1" - checksum: 553c218f582b9c7f96159dd55d082fc6df386ea86a78a3798b768f87f761d6f01ea52dd76225e69199720fa0684901d38353cd0978a39ef4f7f4fd287c4e9262 - languageName: node - linkType: hard - "p-retry@npm:4": version: 4.6.2 resolution: "p-retry@npm:4.6.2" @@ -11004,15 +7421,6 @@ __metadata: languageName: node linkType: hard -"p-timeout@npm:^3.0.0": - version: 3.2.0 - resolution: "p-timeout@npm:3.2.0" - dependencies: - p-finally: ^1.0.0 - checksum: 3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c - languageName: node - linkType: hard - "p-try@npm:^2.0.0": version: 2.2.0 resolution: "p-try@npm:2.2.0" @@ -11020,32 +7428,6 @@ __metadata: languageName: node linkType: hard -"p-wait-for@npm:3": - version: 3.2.0 - resolution: "p-wait-for@npm:3.2.0" - dependencies: - p-timeout: ^3.0.0 - checksum: 7f6840e9233d96836a233dee9c5b1c711bfdf76228d0eaea68fa74a79418f5eef6dc1915dadd28d17312a99f6a53daa308b1c18b779bc9c1dabcae3d6b35a086 - languageName: node - linkType: hard - -"package-config@npm:^5.0.0": - version: 5.0.0 - resolution: "package-config@npm:5.0.0" - dependencies: - find-up-simple: ^1.0.0 - load-json-file: ^7.0.1 - checksum: dfff5264c51a0dad7af9a55b02e3b8b6e457075e9c4f02d0ffacfeee9af4dd5db2b566dae41486412161292b8741483cd89d5a8404a5742fc54d718dadacac4a - languageName: node - linkType: hard - -"pako@npm:~1.0.5": - version: 1.0.11 - resolution: "pako@npm:1.0.11" - checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 - languageName: node - linkType: hard - "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -11055,21 +7437,7 @@ __metadata: languageName: node linkType: hard -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": - version: 5.1.7 - resolution: "parse-asn1@npm:5.1.7" - dependencies: - asn1.js: ^4.10.1 - browserify-aes: ^1.2.0 - evp_bytestokey: ^1.0.3 - hash-base: ~3.0 - pbkdf2: ^3.1.2 - safe-buffer: ^5.2.1 - checksum: 93c7194c1ed63a13e0b212d854b5213ad1aca0ace41c66b311e97cca0519cf9240f79435a0306a3b412c257f0ea3f1953fd0d9549419a0952c9e995ab361fd6c - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": +"parse-json@npm:^5.0.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -11081,13 +7449,6 @@ __metadata: languageName: node linkType: hard -"parse-ms@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-ms@npm:4.0.0" - checksum: 673c801d9f957ff79962d71ed5a24850163f4181a90dd30c4e3666b3a804f53b77f1f0556792e8b2adbb5d58757907d1aa51d7d7dc75997c2a56d72937cbc8b7 - languageName: node - linkType: hard - "parseurl@npm:^1.3.2": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -11116,7 +7477,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": +"path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 @@ -11147,7 +7508,14 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^6.1.0, path-to-regexp@npm:^6.2.1": +"path-to-regexp@npm:^6.1.0": + version: 6.2.2 + resolution: "path-to-regexp@npm:6.2.2" + checksum: b7b0005c36f5099f9ed1fb20a820d2e4ed1297ffe683ea1d678f5e976eb9544f01debb281369dabdc26da82e6453901bf71acf2c7ed14b9243536c2a45286c33 + languageName: node + linkType: hard + +"path-to-regexp@npm:^6.2.1": version: 6.2.1 resolution: "path-to-regexp@npm:6.2.1" checksum: f0227af8284ea13300f4293ba111e3635142f976d4197f14d5ad1f124aebd9118783dd2e5f1fe16f7273743cc3dbeddfb7493f237bb27c10fdae07020cc9b698 @@ -11161,13 +7529,6 @@ __metadata: languageName: node linkType: hard -"path-type@npm:^5.0.0": - version: 5.0.0 - resolution: "path-type@npm:5.0.0" - checksum: 15ec24050e8932c2c98d085b72cfa0d6b4eeb4cbde151a0a05726d8afae85784fc5544f733d8dfc68536587d5143d29c0bd793623fad03d7e61cc00067291cd5 - languageName: node - linkType: hard - "pathe@npm:^1.1.0, pathe@npm:^1.1.1, pathe@npm:^1.1.2": version: 1.1.2 resolution: "pathe@npm:1.1.2" @@ -11182,19 +7543,6 @@ __metadata: languageName: node linkType: hard -"pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.1.2": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" - dependencies: - create-hash: ^1.1.2 - create-hmac: ^1.1.4 - ripemd160: ^2.0.1 - safe-buffer: ^5.0.1 - sha.js: ^2.4.8 - checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 - languageName: node - linkType: hard - "peek-readable@npm:^5.0.0": version: 5.0.0 resolution: "peek-readable@npm:5.0.0" @@ -11209,13 +7557,6 @@ __metadata: languageName: node linkType: hard -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 - languageName: node - linkType: hard - "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -11223,35 +7564,14 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf languageName: node linkType: hard -"picomatch@npm:^3.0.1": - version: 3.0.1 - resolution: "picomatch@npm:3.0.1" - checksum: b7fe18174bcc05bbf0ea09cc85623ae395676b3e6bc25636d4c20db79a948586237e429905453bf1ba385bc7a7aa5b56f1b351680e650d2b5c305ceb98dfc914 - languageName: node - linkType: hard - -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b - languageName: node - linkType: hard - -"pirates@npm:^4.0.4": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 - languageName: node - linkType: hard - -"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": +"pkg-dir@npm:^4.1.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: @@ -11271,15 +7591,6 @@ __metadata: languageName: node linkType: hard -"plur@npm:^5.1.0": - version: 5.1.0 - resolution: "plur@npm:5.1.0" - dependencies: - irregular-plurals: ^3.3.0 - checksum: 57e400dc4b926768fb0abab7f8688fe17e85673712134546e7beaaee188bae7e0504976e847d7e41d0d6103ff2fd61204095f03c2a45de19a8bad15aecb45cc1 - languageName: node - linkType: hard - "pnglib@npm:0.0.1": version: 0.0.1 resolution: "pnglib@npm:0.0.1" @@ -11287,13 +7598,6 @@ __metadata: languageName: node linkType: hard -"possible-typed-array-names@npm:^1.0.0": - version: 1.0.0 - resolution: "possible-typed-array-names@npm:1.0.0" - checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae - languageName: node - linkType: hard - "postcss-value-parser@npm:^4.0.2": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" @@ -11348,7 +7652,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": +"pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" dependencies: @@ -11359,26 +7663,6 @@ __metadata: languageName: node linkType: hard -"pretty-ms@npm:^9.0.0": - version: 9.0.0 - resolution: "pretty-ms@npm:9.0.0" - dependencies: - parse-ms: ^4.0.0 - checksum: 072b17547e09cb232e8e4c7be0281e256b6d8acd18dfb2fdd715d50330d1689fdaa877f53cf90c62ed419ef842f0f5fb94a2cd8ed1aa6d7608ad48834219435d - languageName: node - linkType: hard - -"pretty@npm:^2.0.0": - version: 2.0.0 - resolution: "pretty@npm:2.0.0" - dependencies: - condense-newlines: ^0.2.1 - extend-shallow: ^2.0.1 - js-beautify: ^1.6.12 - checksum: 9c41ae0559195af2fb2496d84c6f442843e045d269d4008a6dd336f8372d7481395ed5ab23e5711b6172682c27cb0542e1ab3ca11b38da48f1109c0b701d0ef9 - languageName: node - linkType: hard - "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -11386,20 +7670,6 @@ __metadata: languageName: node linkType: hard -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf - languageName: node - linkType: hard - -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -11410,16 +7680,6 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d - languageName: node - linkType: hard - "prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -11438,20 +7698,6 @@ __metadata: languageName: node linkType: hard -"property-expr@npm:^2.0.4": - version: 2.0.6 - resolution: "property-expr@npm:2.0.6" - checksum: 89977f4bb230736c1876f460dd7ca9328034502fd92e738deb40516d16564b850c0bbc4e052c3df88b5b8cd58e51c93b46a94bea049a3f23f4a022c038864cab - languageName: node - linkType: hard - -"proto-list@npm:~1.2.1": - version: 1.2.4 - resolution: "proto-list@npm:1.2.4" - checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 - languageName: node - linkType: hard - "proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -11459,13 +7705,6 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.28": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d - languageName: node - linkType: hard - "pstree.remy@npm:^1.1.8": version: 1.1.8 resolution: "pstree.remy@npm:1.1.8" @@ -11473,20 +7712,6 @@ __metadata: languageName: node linkType: hard -"public-encrypt@npm:^4.0.0": - version: 4.0.3 - resolution: "public-encrypt@npm:4.0.3" - dependencies: - bn.js: ^4.1.0 - browserify-rsa: ^4.0.0 - create-hash: ^1.1.0 - parse-asn1: ^5.0.0 - randombytes: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935 - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -11497,13 +7722,6 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^1.4.1": - version: 1.4.1 - resolution: "punycode@npm:1.4.1" - checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 - languageName: node - linkType: hard - "punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -11511,22 +7729,6 @@ __metadata: languageName: node linkType: hard -"pure-rand@npm:^6.0.0": - version: 6.0.4 - resolution: "pure-rand@npm:6.0.4" - checksum: e1c4e69f8bf7303e5252756d67c3c7551385cd34d94a1f511fe099727ccbab74c898c03a06d4c4a24a89b51858781057b83ebbfe740d984240cdc04fead36068 - languageName: node - linkType: hard - -"qs@npm:^6.11.2": - version: 6.12.0 - resolution: "qs@npm:6.12.0" - dependencies: - side-channel: ^1.0.6 - checksum: ba007fb2488880b9c6c3df356fe6888b9c1f4c5127552edac214486cfe83a332de09a5c40d490d79bb27bef977ba1085a8497512ff52eaac72e26564f77ce908 - languageName: node - linkType: hard - "qs@npm:^6.5.2": version: 6.11.2 resolution: "qs@npm:6.11.2" @@ -11536,20 +7738,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 - languageName: node - linkType: hard - -"querystring-es3@npm:^0.2.1": - version: 0.2.1 - resolution: "querystring-es3@npm:0.2.1" - checksum: 691e8d6b8b157e7cd49ae8e83fcf86de39ab3ba948c25abaa94fba84c0986c641aa2f597770848c64abce290ed17a39c9df6df737dfa7e87c3b63acc7d225d61 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -11571,25 +7759,6 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: ^5.1.0 - checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 - languageName: node - linkType: hard - -"randomfill@npm:^1.0.3": - version: 1.0.4 - resolution: "randomfill@npm:1.0.4" - dependencies: - randombytes: ^2.0.5 - safe-buffer: ^5.1.0 - checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 - languageName: node - linkType: hard - "raw-body@npm:^2.3.3": version: 2.5.2 resolution: "raw-body@npm:2.5.2" @@ -11727,22 +7896,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.2, readable-stream@npm:^2.3.8": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.3 - isarray: ~1.0.0 - process-nextick-args: ~2.0.0 - safe-buffer: ~5.1.1 - string_decoder: ~1.1.1 - util-deprecate: ~1.0.1 - checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 - languageName: node - linkType: hard - -"readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -11799,38 +7953,6 @@ __metadata: languageName: node linkType: hard -"reconnecting-websocket@npm:^4.4.0": - version: 4.4.0 - resolution: "reconnecting-websocket@npm:4.4.0" - checksum: 7ee379ff3a4bddf9d47fb6f3fb2d9450865f0ed2d91f003e6d0c12c901e8c135379a143a933e7bed7bc33133f04bdaed534bd68591c95730044dc69d32da4866 - languageName: node - linkType: hard - -"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": - version: 1.2.0 - resolution: "redis-errors@npm:1.2.0" - checksum: f28ac2692113f6f9c222670735aa58aeae413464fd58ccf3fce3f700cae7262606300840c802c64f2b53f19f65993da24dc918afc277e9e33ac1ff09edb394f4 - languageName: node - linkType: hard - -"redis-info@npm:^3.0.8": - version: 3.1.0 - resolution: "redis-info@npm:3.1.0" - dependencies: - lodash: ^4.17.11 - checksum: d72ff0584ebb4a2149cfcfcf9142d9a7f9d0b96ae53fbf431f2738f33f1f42add6505ff73b2d640cab345923a34b217d7c728fa706cc81ad8bd8ad4c48987445 - languageName: node - linkType: hard - -"redis-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "redis-parser@npm:3.0.0" - dependencies: - redis-errors: ^1.0.0 - checksum: 89290ae530332f2ae37577647fa18208d10308a1a6ba750b9d9a093e7398f5e5253f19855b64c98757f7129cccce958e4af2573fdc33bad41405f87f1943459a - languageName: node - linkType: hard - "regenerator-runtime@npm:^0.14.0": version: 0.14.1 resolution: "regenerator-runtime@npm:0.14.1" @@ -11847,34 +7969,6 @@ __metadata: languageName: node linkType: hard -"request@npm:^2.88.2": - version: 2.88.2 - resolution: "request@npm:2.88.2" - dependencies: - aws-sign2: ~0.7.0 - aws4: ^1.8.0 - caseless: ~0.12.0 - combined-stream: ~1.0.6 - extend: ~3.0.2 - forever-agent: ~0.6.1 - form-data: ~2.3.2 - har-validator: ~5.1.3 - http-signature: ~1.2.0 - is-typedarray: ~1.0.0 - isstream: ~0.1.2 - json-stringify-safe: ~5.0.1 - mime-types: ~2.1.19 - oauth-sign: ~0.9.0 - performance-now: ^2.1.0 - qs: ~6.5.2 - safe-buffer: ^5.1.2 - tough-cookie: ~2.5.0 - tunnel-agent: ^0.6.0 - uuid: ^3.3.2 - checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983 - languageName: node - linkType: hard - "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -11882,15 +7976,6 @@ __metadata: languageName: node linkType: hard -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -11898,13 +7983,6 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - "resolve-path@npm:^1.4.0": version: 1.4.0 resolution: "resolve-path@npm:1.4.0" @@ -11915,14 +7993,7 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^2.0.0": - version: 2.0.2 - resolution: "resolve.exports@npm:2.0.2" - checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 - languageName: node - linkType: hard - -"resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:~1.22.1": +"resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:~1.22.1": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -11945,7 +8016,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@~1.22.1#~builtin": +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@~1.22.1#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" dependencies: @@ -12000,16 +8071,6 @@ __metadata: languageName: node linkType: hard -"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": - version: 2.0.2 - resolution: "ripemd160@npm:2.0.2" - dependencies: - hash-base: ^3.0.0 - inherits: ^2.0.1 - checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 - languageName: node - linkType: hard - "rollup@npm:^4.2.0": version: 4.12.0 resolution: "rollup@npm:4.12.0" @@ -12089,20 +8150,13 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - "safe-regex@npm:^2.1.1": version: 2.1.1 resolution: "safe-regex@npm:2.1.1" @@ -12119,14 +8173,7 @@ __metadata: languageName: node linkType: hard -"safe-timers@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-timers@npm:1.1.0" - checksum: 6387c1e09fae12c4b96fb62e2575ace9ec6b1f73ad73d937e0ecc79de92cb64e56dbbfa60a8d5d7c54c035960457fa59cffd5d6b396fe0d82ed8042c889a7f1a - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 @@ -12167,7 +8214,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": +"semver@npm:^6.0.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -12176,7 +8223,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": +"semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": version: 7.6.0 resolution: "semver@npm:7.6.0" dependencies: @@ -12198,22 +8245,6 @@ __metadata: languageName: node linkType: hard -"serialize-error@npm:^7.0.1": - version: 7.0.1 - resolution: "serialize-error@npm:7.0.1" - dependencies: - type-fest: ^0.13.1 - checksum: e0aba4dca2fc9fe74ae1baf38dbd99190e1945445a241ba646290f2176cdb2032281a76443b02ccf0caf30da5657d510746506368889a593b9835a497fc0732e - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - "set-function-length@npm:^1.2.1": version: 1.2.1 resolution: "set-function-length@npm:1.2.1" @@ -12228,13 +8259,6 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.4": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd - languageName: node - linkType: hard - "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -12249,18 +8273,6 @@ __metadata: languageName: node linkType: hard -"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": - version: 2.4.11 - resolution: "sha.js@npm:2.4.11" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - bin: - sha.js: ./bin.js - checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 - languageName: node - linkType: hard - "shallowequal@npm:1.1.0": version: 1.1.0 resolution: "shallowequal@npm:1.1.0" @@ -12287,19 +8299,7 @@ __metadata: "shell-quote@npm:^1.8.1": version: 1.8.1 resolution: "shell-quote@npm:1.8.1" - checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b - languageName: node - linkType: hard - -"shiki@npm:^0.14.7": - version: 0.14.7 - resolution: "shiki@npm:0.14.7" - dependencies: - ansi-sequence-parser: ^1.1.0 - jsonc-parser: ^3.2.0 - vscode-oniguruma: ^1.7.0 - vscode-textmate: ^8.0.0 - checksum: 2aec3b3519df977c4391df9e1825cb496e9a4d7e11395f05a0da77e4fa2f7c3d9d6e6ee94029ac699533017f2b25637ee68f6d39f05f311535c2704d0329b520 + checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b languageName: node linkType: hard @@ -12315,18 +8315,6 @@ __metadata: languageName: node linkType: hard -"side-channel@npm:^1.0.6": - version: 1.0.6 - resolution: "side-channel@npm:1.0.6" - dependencies: - call-bind: ^1.0.7 - es-errors: ^1.3.0 - get-intrinsic: ^1.2.4 - object-inspect: ^1.13.1 - checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 - languageName: node - linkType: hard - "sift@npm:16.0.1": version: 16.0.1 resolution: "sift@npm:16.0.1" @@ -12341,13 +8329,6 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - "signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" @@ -12384,13 +8365,6 @@ __metadata: languageName: node linkType: hard -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -12398,23 +8372,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^5.1.0": - version: 5.1.0 - resolution: "slash@npm:5.1.0" - checksum: 70434b34c50eb21b741d37d455110258c42d2cf18c01e6518aeb7299f3c6e626330c889c0c552b5ca2ef54a8f5a74213ab48895f0640717cacefeef6830a1ba4 - languageName: node - linkType: hard - -"slice-ansi@npm:^5.0.0": - version: 5.0.0 - resolution: "slice-ansi@npm:5.0.0" - dependencies: - ansi-styles: ^6.0.0 - is-fullwidth-code-point: ^4.0.0 - checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e - languageName: node - linkType: hard - "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -12459,16 +8416,6 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 - languageName: node - linkType: hard - "source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -12537,9 +8484,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.17 - resolution: "spdx-license-ids@npm:3.0.17" - checksum: 0aba5d16292ff604dd20982200e23b4d425f6ba364765039bdbde2f6c956b9909fce1ad040a897916a5f87388e85e001f90cb64bf706b6e319f3908cfc445a59 + version: 3.0.18 + resolution: "spdx-license-ids@npm:3.0.18" + checksum: 457825df5dd1fc0135b0bb848c896143f70945cc2da148afc71c73ed0837d1d651f809006e406d82109c9dd71a8cb39785a3604815fe46bc0548e9d3976f6b69 languageName: node linkType: hard @@ -12557,27 +8504,6 @@ __metadata: languageName: node linkType: hard -"sshpk@npm:^1.7.0": - version: 1.18.0 - resolution: "sshpk@npm:1.18.0" - dependencies: - asn1: ~0.2.3 - assert-plus: ^1.0.0 - bcrypt-pbkdf: ^1.0.0 - dashdash: ^1.12.0 - ecc-jsbn: ~0.1.1 - getpass: ^0.1.1 - jsbn: ~0.1.0 - safer-buffer: ^2.0.2 - tweetnacl: ~0.14.0 - bin: - sshpk-conv: bin/sshpk-conv - sshpk-sign: bin/sshpk-sign - sshpk-verify: bin/sshpk-verify - checksum: 01d43374eee3a7e37b3b82fdbecd5518cbb2e47ccbed27d2ae30f9753f22bd6ffad31225cb8ef013bc3fb7785e686cea619203ee1439a228f965558c367c3cfa - languageName: node - linkType: hard - "ssri@npm:^10.0.0": version: 10.0.5 resolution: "ssri@npm:10.0.5" @@ -12594,15 +8520,6 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.3, stack-utils@npm:^2.0.6": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 - languageName: node - linkType: hard - "stackback@npm:0.0.2": version: 0.0.2 resolution: "stackback@npm:0.0.2" @@ -12610,13 +8527,6 @@ __metadata: languageName: node linkType: hard -"standard-as-callback@npm:^2.1.0": - version: 2.1.0 - resolution: "standard-as-callback@npm:2.1.0" - checksum: 88bec83ee220687c72d94fd86a98d5272c91d37ec64b66d830dbc0d79b62bfa6e47f53b71646011835fc9ce7fae62739545d13124262b53be4fbb3e2ebad551c - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -12645,28 +8555,6 @@ __metadata: languageName: node linkType: hard -"stream-browserify@npm:^3.0.0": - version: 3.0.0 - resolution: "stream-browserify@npm:3.0.0" - dependencies: - inherits: ~2.0.4 - readable-stream: ^3.5.0 - checksum: 4c47ef64d6f03815a9ca3874e2319805e8e8a85f3550776c47ce523b6f4c6cd57f40e46ec6a9ab8ad260fde61863c2718f250d3bedb3fe9052444eb9abfd9921 - languageName: node - linkType: hard - -"stream-http@npm:^3.2.0": - version: 3.2.0 - resolution: "stream-http@npm:3.2.0" - dependencies: - builtin-status-codes: ^3.0.0 - inherits: ^2.0.4 - readable-stream: ^3.6.0 - xtend: ^4.0.2 - checksum: c9b78453aeb0c84fcc59555518ac62bacab9fa98e323e7b7666e5f9f58af8f3155e34481078509b02929bd1268427f664d186604cdccee95abc446099b339f83 - languageName: node - linkType: hard - "streamx@npm:^2.15.0": version: 2.16.1 resolution: "streamx@npm:2.16.1" @@ -12688,17 +8576,7 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -12720,18 +8598,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^7.0.0": - version: 7.1.0 - resolution: "string-width@npm:7.1.0" - dependencies: - emoji-regex: ^10.3.0 - get-east-asian-width: ^1.0.0 - strip-ansi: ^7.1.0 - checksum: a183573fe7209e0d294f661846d33f8caf72aa86d983e5b48a0ed45ab15bcccb02c6f0344b58b571988871105457137b8207855ea536827dbc4a376a0f31bf8f - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": +"string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: @@ -12740,15 +8607,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: ~5.1.0 - checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b - languageName: node - linkType: hard - "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -12758,7 +8616,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": +"strip-ansi@npm:^7.0.1": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: @@ -12767,20 +8625,6 @@ __metadata: languageName: node linkType: hard -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 - languageName: node - linkType: hard - "strip-final-newline@npm:^3.0.0": version: 3.0.0 resolution: "strip-final-newline@npm:3.0.0" @@ -12848,18 +8692,6 @@ __metadata: languageName: node linkType: hard -"supertap@npm:^3.0.1": - version: 3.0.1 - resolution: "supertap@npm:3.0.1" - dependencies: - indent-string: ^5.0.0 - js-yaml: ^3.14.1 - serialize-error: ^7.0.1 - strip-ansi: ^7.0.1 - checksum: ee3d71c1d25f7f15d4a849e72b0c5f430df7cd8f702cf082fdbec5642a9546be6557766745655fa3a3e9c88f7c7eed849f2d74457b5b72cb9d94a779c0c8a948 - languageName: node - linkType: hard - "supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -12878,7 +8710,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": +"supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -13038,40 +8870,6 @@ __metadata: languageName: node linkType: hard -"thenify-all@npm:^1.0.0": - version: 1.6.0 - resolution: "thenify-all@npm:1.6.0" - dependencies: - thenify: ">= 3.1.0 < 4" - checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e - languageName: node - linkType: hard - -"thenify@npm:>= 3.1.0 < 4": - version: 3.3.1 - resolution: "thenify@npm:3.3.1" - dependencies: - any-promise: ^1.0.0 - checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e - languageName: node - linkType: hard - -"time-zone@npm:^1.0.0": - version: 1.0.0 - resolution: "time-zone@npm:1.0.0" - checksum: e46f5a69b8c236dcd8e91e29d40d4e7a3495ed4f59888c3f84ce1d9678e20461421a6ba41233509d47dd94bc18f1a4377764838b21b584663f942b3426dcbce8 - languageName: node - linkType: hard - -"timers-browserify@npm:^2.0.12": - version: 2.0.12 - resolution: "timers-browserify@npm:2.0.12" - dependencies: - setimmediate: ^1.0.4 - checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 - languageName: node - linkType: hard - "tiny-invariant@npm:^1.3.1": version: 1.3.3 resolution: "tiny-invariant@npm:1.3.3" @@ -13100,13 +8898,6 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -13147,13 +8938,6 @@ __metadata: languageName: node linkType: hard -"toposort@npm:^2.0.2": - version: 2.0.2 - resolution: "toposort@npm:2.0.2" - checksum: d64c74b570391c9432873f48e231b439ee56bc49f7cb9780b505cfdf5cb832f808d0bae072515d93834dd6bceca5bb34448b5b4b408335e4d4716eaf68195dcb - languageName: node - linkType: hard - "totalist@npm:^3.0.0": version: 3.0.1 resolution: "totalist@npm:3.0.1" @@ -13172,16 +8956,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" - dependencies: - psl: ^1.1.28 - punycode: ^2.1.1 - checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977 - languageName: node - linkType: hard - "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -13200,13 +8974,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 - languageName: node - linkType: hard - "traverse@npm:~0.6.6": version: 0.6.8 resolution: "traverse@npm:0.6.8" @@ -13239,39 +9006,6 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^29.1.2": - version: 29.1.2 - resolution: "ts-jest@npm:29.1.2" - dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^29.0.0 - json5: ^2.2.3 - lodash.memoize: 4.x - make-error: 1.x - semver: ^7.5.3 - yargs-parser: ^21.0.1 - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/types": ^29.0.0 - babel-jest: ^29.0.0 - jest: ^29.0.0 - typescript: ">=4.3 <6" - peerDependenciesMeta: - "@babel/core": - optional: true - "@jest/types": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - bin: - ts-jest: cli.js - checksum: a0ce0affc1b716c78c9ab55837829c42cb04b753d174a5c796bb1ddf9f0379fc20647b76fbe30edb30d9b23181908138d6b4c51ef2ae5e187b66635c295cefd5 - languageName: node - linkType: hard - "ts-node@npm:^10.9.2": version: 10.9.2 resolution: "ts-node@npm:10.9.2" @@ -13338,7 +9072,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": +"tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad @@ -13363,74 +9097,58 @@ __metadata: languageName: node linkType: hard -"tty-browserify@npm:^0.0.1": - version: 0.0.1 - resolution: "tty-browserify@npm:0.0.1" - checksum: 93b745d43fa5a7d2b948fa23be8d313576d1d884b48acd957c07710bac1c0d8ac34c0556ad4c57c73d36e11741763ef66b3fb4fb97b06b7e4d525315a3cd45f5 - languageName: node - linkType: hard - -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: ^5.0.1 - checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 - languageName: node - linkType: hard - -"turbo-darwin-64@npm:1.12.5": - version: 1.12.5 - resolution: "turbo-darwin-64@npm:1.12.5" +"turbo-darwin-64@npm:2.0.3": + version: 2.0.3 + resolution: "turbo-darwin-64@npm:2.0.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.12.5": - version: 1.12.5 - resolution: "turbo-darwin-arm64@npm:1.12.5" +"turbo-darwin-arm64@npm:2.0.3": + version: 2.0.3 + resolution: "turbo-darwin-arm64@npm:2.0.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-linux-64@npm:1.12.5": - version: 1.12.5 - resolution: "turbo-linux-64@npm:1.12.5" +"turbo-linux-64@npm:2.0.3": + version: 2.0.3 + resolution: "turbo-linux-64@npm:2.0.3" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.12.5": - version: 1.12.5 - resolution: "turbo-linux-arm64@npm:1.12.5" +"turbo-linux-arm64@npm:2.0.3": + version: 2.0.3 + resolution: "turbo-linux-arm64@npm:2.0.3" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-windows-64@npm:1.12.5": - version: 1.12.5 - resolution: "turbo-windows-64@npm:1.12.5" +"turbo-windows-64@npm:2.0.3": + version: 2.0.3 + resolution: "turbo-windows-64@npm:2.0.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.12.5": - version: 1.12.5 - resolution: "turbo-windows-arm64@npm:1.12.5" +"turbo-windows-arm64@npm:2.0.3": + version: 2.0.3 + resolution: "turbo-windows-arm64@npm:2.0.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"turbo@npm:^1.12.5": - version: 1.12.5 - resolution: "turbo@npm:1.12.5" - dependencies: - turbo-darwin-64: 1.12.5 - turbo-darwin-arm64: 1.12.5 - turbo-linux-64: 1.12.5 - turbo-linux-arm64: 1.12.5 - turbo-windows-64: 1.12.5 - turbo-windows-arm64: 1.12.5 +"turbo@npm:v2.0.3": + version: 2.0.3 + resolution: "turbo@npm:2.0.3" + dependencies: + turbo-darwin-64: 2.0.3 + turbo-darwin-arm64: 2.0.3 + turbo-linux-64: 2.0.3 + turbo-linux-arm64: 2.0.3 + turbo-windows-64: 2.0.3 + turbo-windows-arm64: 2.0.3 dependenciesMeta: turbo-darwin-64: optional: true @@ -13446,21 +9164,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: 3f9600b00e50abce4793a2ea8a04da5afd9eff2e87259d41b0be817ab0e9f7c4ea3f2d6188ce3ff52510820cb7031a05747ee0b033e1b5c40c9d7b1ef76c20bd - languageName: node - linkType: hard - -"turborepo@npm:^0.0.1": - version: 0.0.1 - resolution: "turborepo@npm:0.0.1" - checksum: 4975a23063185a87729f5de4fdb42c2118b52d88263128fa1416fe651798725a8d9f3e8a10a099d1188bd5ae04a39a93fe39810ced7e9187230ae9aa3ba645cf - languageName: node - linkType: hard - -"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": - version: 0.14.5 - resolution: "tweetnacl@npm:0.14.5" - checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 + checksum: deeddef5bbf1db454ebcc0d460f638506146f85724c5bb10c9b08009c3471798ce3594b4ef50fd03722313d9ef80552f9c93119e04c5859eac73225837caccac languageName: node linkType: hard @@ -13473,20 +9177,13 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 languageName: node linkType: hard -"type-fest@npm:^0.13.1": - version: 0.13.1 - resolution: "type-fest@npm:0.13.1" - checksum: e6bf2e3c449f27d4ef5d56faf8b86feafbc3aec3025fc9a5fbe2db0a2587c44714521f9c30d8516a833c8c506d6263f5cc11267522b10c6ccdb6cc55b0a9d1c4 - languageName: node - linkType: hard - "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -13494,13 +9191,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 - languageName: node - linkType: hard - "type-fest@npm:^0.6.0": version: 0.6.0 resolution: "type-fest@npm:0.6.0" @@ -13539,33 +9229,6 @@ __metadata: languageName: node linkType: hard -"typedoc-plugin-markdown@npm:^3.17.1": - version: 3.17.1 - resolution: "typedoc-plugin-markdown@npm:3.17.1" - dependencies: - handlebars: ^4.7.7 - peerDependencies: - typedoc: ">=0.24.0" - checksum: f12494bfc98ef532be63fb5e7630ff0aa2de17bb22b1d0b6260c416fe8b62cb537ddd3576cadc90c57c4aae2371722994ed873dc3220b23660e149a3eb676c04 - languageName: node - linkType: hard - -"typedoc@npm:^0.25.12": - version: 0.25.12 - resolution: "typedoc@npm:0.25.12" - dependencies: - lunr: ^2.3.9 - marked: ^4.3.0 - minimatch: ^9.0.3 - shiki: ^0.14.7 - peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x - bin: - typedoc: bin/typedoc - checksum: 6022dd921f78361b62ec9cbb8b847cbcf00e0f2bc45799409d5f6d74edbca8d82d31bf9a7d17a4e1c3c1916ba8265c2266bded50902533faaec53d5cdb558e80 - languageName: node - linkType: hard - "typescript@npm:5.3.3, typescript@npm:^5.2.2, typescript@npm:^5.3.3": version: 5.3.3 resolution: "typescript@npm:5.3.3" @@ -13594,11 +9257,11 @@ __metadata: linkType: hard "uglify-js@npm:^3.1.4": - version: 3.17.4 - resolution: "uglify-js@npm:3.17.4" + version: 3.18.0 + resolution: "uglify-js@npm:3.18.0" bin: uglifyjs: bin/uglifyjs - checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 + checksum: 887733d05d4139a94dffd04a5f07ee7d8be70201c016ea48cb82703778b5c48fadbe6e5e7ac956425522f72e657d3eade23f06ae8a0e2eeed2d684bf6cc25e36 languageName: node linkType: hard @@ -13623,13 +9286,6 @@ __metadata: languageName: node linkType: hard -"unicorn-magic@npm:^0.1.0": - version: 0.1.0 - resolution: "unicorn-magic@npm:0.1.0" - checksum: 48c5882ca3378f380318c0b4eb1d73b7e3c5b728859b060276e0a490051d4180966beeb48962d850fd0c6816543bcdfc28629dcd030bb62a286a2ae2acb5acb6 - languageName: node - linkType: hard - "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -13701,37 +9357,14 @@ __metadata: languageName: node linkType: hard -"url@npm:^0.11.0": - version: 0.11.3 - resolution: "url@npm:0.11.3" - dependencies: - punycode: ^1.4.1 - qs: ^6.11.2 - checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 languageName: node linkType: hard -"util@npm:^0.12.3, util@npm:^0.12.5": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: ^2.0.3 - is-arguments: ^1.0.4 - is-generator-function: ^1.0.7 - is-typed-array: ^1.1.3 - which-typed-array: ^1.1.2 - checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a - languageName: node - linkType: hard - -"uuid@npm:9, uuid@npm:^9.0.0": +"uuid@npm:9": version: 9.0.1 resolution: "uuid@npm:9.0.1" bin: @@ -13740,15 +9373,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f - languageName: node - linkType: hard - "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -13756,7 +9380,7 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.1, v8-to-istanbul@npm:^9.2.0": +"v8-to-istanbul@npm:^9.2.0": version: 9.2.0 resolution: "v8-to-istanbul@npm:9.2.0" dependencies: @@ -13798,17 +9422,6 @@ __metadata: languageName: node linkType: hard -"verror@npm:1.10.0": - version: 1.10.0 - resolution: "verror@npm:1.10.0" - dependencies: - assert-plus: ^1.0.0 - core-util-is: 1.0.2 - extsprintf: ^1.2.0 - checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea - languageName: node - linkType: hard - "victory-vendor@npm:^36.6.8": version: 36.9.1 resolution: "victory-vendor@npm:36.9.1" @@ -14029,27 +9642,6 @@ __metadata: languageName: node linkType: hard -"vm-browserify@npm:^1.1.2": - version: 1.1.2 - resolution: "vm-browserify@npm:1.1.2" - checksum: 10a1c50aab54ff8b4c9042c15fc64aefccce8d2fb90c0640403242db0ee7fb269f9b102bdb69cfb435d7ef3180d61fd4fb004a043a12709abaf9056cfd7e039d - languageName: node - linkType: hard - -"vscode-oniguruma@npm:^1.7.0": - version: 1.7.0 - resolution: "vscode-oniguruma@npm:1.7.0" - checksum: 53519d91d90593e6fb080260892e87d447e9b200c4964d766772b5053f5699066539d92100f77f1302c91e8fc5d9c772fbe40fe4c90f3d411a96d5a9b1e63f42 - languageName: node - linkType: hard - -"vscode-textmate@npm:^8.0.0": - version: 8.0.0 - resolution: "vscode-textmate@npm:8.0.0" - checksum: 127780dfea89559d70b8326df6ec344cfd701312dd7f3f591a718693812b7852c30b6715e3cfc8b3200a4e2515b4c96f0843c0eacc0a3020969b5de262c2a4bb - languageName: node - linkType: hard - "vue-template-compiler@npm:^2.7.14": version: 2.7.16 resolution: "vue-template-compiler@npm:2.7.16" @@ -14075,15 +9667,6 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - "web-streams-polyfill@npm:^3.0.3": version: 3.3.3 resolution: "web-streams-polyfill@npm:3.3.3" @@ -14091,13 +9674,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -14105,13 +9681,6 @@ __metadata: languageName: node linkType: hard -"well-known-symbols@npm:^2.0.0": - version: 2.0.0 - resolution: "well-known-symbols@npm:2.0.0" - checksum: 4f54bbc3012371cb4d228f436891b8e7536d34ac61a57541890257e96788608e096231e0121ac24d08ef2f908b3eb2dc0adba35023eaeb2a7df655da91415402 - languageName: node - linkType: hard - "whatwg-url@npm:^11.0.0": version: 11.0.0 resolution: "whatwg-url@npm:11.0.0" @@ -14132,29 +9701,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: ~0.0.3 - webidl-conversions: ^3.0.0 - checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.2": - version: 1.1.15 - resolution: "which-typed-array@npm:1.1.15" - dependencies: - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-tostringtag: ^1.0.2 - checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 - languageName: node - linkType: hard - "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -14189,15 +9735,6 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.2": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - "winston-transport@npm:^4.7.0": version: 4.7.0 resolution: "winston-transport@npm:4.7.0" @@ -14264,26 +9801,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.2": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c - languageName: node - linkType: hard - -"write-file-atomic@npm:^5.0.1": - version: 5.0.1 - resolution: "write-file-atomic@npm:5.0.1" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^4.0.1 - checksum: 8dbb0e2512c2f72ccc20ccedab9986c7d02d04039ed6e8780c987dc4940b793339c50172a1008eed7747001bfacc0ca47562668a069a7506c46c77d7ba3926a9 - languageName: node - linkType: hard - "ws@npm:^8.15.1, ws@npm:^8.16.0, ws@npm:^8.8.1": version: 8.16.0 resolution: "ws@npm:8.16.0" @@ -14299,7 +9816,7 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0, xtend@npm:^4.0.2": +"xtend@npm:^4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a @@ -14354,14 +9871,14 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": +"yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard -"yargs@npm:^17.3.1, yargs@npm:^17.7.2": +"yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -14414,21 +9931,6 @@ __metadata: languageName: node linkType: hard -"yup@npm:0.32.9": - version: 0.32.9 - resolution: "yup@npm:0.32.9" - dependencies: - "@babel/runtime": ^7.10.5 - "@types/lodash": ^4.14.165 - lodash: ^4.17.20 - lodash-es: ^4.17.15 - nanoclone: ^0.2.1 - property-expr: ^2.0.4 - toposort: ^2.0.2 - checksum: 3f33850913a237fb7e59b0b5c71d2cc6bdb1d6b2b01fc24c53ec68b35ad2b95cd49f735532117136495cb57f0ec58f0a7e1f1c55fad685555c7114155170f1ea - languageName: node - linkType: hard - "z-schema@npm:^5.0.1, z-schema@npm:~5.0.2": version: 5.0.5 resolution: "z-schema@npm:5.0.5"