From b856d8224add20ef634a78e1b8a16e75fcaf5bca Mon Sep 17 00:00:00 2001 From: Morgan Mccauley Date: Fri, 23 Feb 2024 09:59:50 +1300 Subject: [PATCH 1/3] chore: Remove legacy code --- .github/workflows/ci.yml | 68 - .github/workflows/deploy-lambdas.yml | 45 - .github/workflows/lambda-ci.yml | 12 - .github/workflows/lambda-dev-pipeline.yml | 21 - .github/workflows/lambda-prod-pipeline.yml | 21 - .github/workflows/test-lambdas.yml | 30 - indexer-js-queue-handler/.gitignore | 2 - indexer-js-queue-handler/README.md | 98 - .../__snapshots__/hasura-client.test.js.snap | 400 - .../__snapshots__/indexer.test.js.snap | 384 - .../__snapshots__/metrics.test.js.snap | 34 - .../__snapshots__/provisioner.test.js.snap | 18 - indexer-js-queue-handler/handler.js | 32 - indexer-js-queue-handler/handler.test.js | 47 - indexer-js-queue-handler/hasura-client.js | 298 - .../hasura-client.test.js | 247 - .../indexer.integration.test.js | 241 - indexer-js-queue-handler/indexer.js | 427 - indexer-js-queue-handler/indexer.test.js | 1039 -- indexer-js-queue-handler/jest.config.js | 6 - indexer-js-queue-handler/metrics.js | 46 - indexer-js-queue-handler/metrics.test.js | 30 - indexer-js-queue-handler/package-lock.json | 14142 ---------------- indexer-js-queue-handler/package.json | 31 - indexer-js-queue-handler/pg-client.js | 30 - indexer-js-queue-handler/provisioner.js | 188 - indexer-js-queue-handler/provisioner.test.js | 215 - .../scripts/migrate-schema-to-db.js | 94 - .../scripts/provision-user-dbs.js | 54 - indexer-js-queue-handler/serverless.yml | 57 - .../social-lag-metrics-writer.js | 62 - indexer-js-queue-handler/test_payload.json | 20 - indexer-js-queue-handler/trace-fetch.js | 73 - indexer/.dockerignore | 13 - indexer/Cargo.lock | 4503 ----- indexer/Cargo.toml | 8 - indexer/Dockerfile | 16 - indexer/README.md | 68 - indexer/download_test_blocks.sh | 9 - indexer/indexer_rule_type/Cargo.lock | 3164 ---- indexer/indexer_rule_type/Cargo.toml | 10 - indexer/indexer_rule_type/src/indexer_rule.rs | 47 - indexer/indexer_rule_type/src/lib.rs | 18 - indexer/indexer_rules_engine/Cargo.toml | 20 - indexer/indexer_rules_engine/README.md | 7 - .../indexer_rules_engine/blocks/93085141.json | 3551 ---- indexer/indexer_rules_engine/src/lib.rs | 25 - indexer/indexer_rules_engine/src/matcher.rs | 141 - .../src/outcomes_reducer.rs | 262 - .../indexer_rules_engine/src/types/events.rs | 20 - .../src/types/indexer_rule_match.rs | 146 - indexer/indexer_rules_engine/src/types/mod.rs | 3 - .../src/types/transactions.rs | 20 - indexer/queryapi_coordinator/Cargo.toml | 45 - indexer/queryapi_coordinator/README.md | 19 - .../src/historical_block_processing.rs | 430 - ...ical_block_processing_integration_tests.rs | 206 - .../src/indexer_reducer.rs | 105 - .../src/indexer_registry.rs | 414 - .../queryapi_coordinator/src/indexer_types.rs | 29 - indexer/queryapi_coordinator/src/main.rs | 431 - indexer/queryapi_coordinator/src/metrics.rs | 58 - indexer/queryapi_coordinator/src/opts.rs | 171 - indexer/queryapi_coordinator/src/s3.rs | 342 - indexer/queryapi_coordinator/src/utils.rs | 102 - indexer/rust-toolchain.toml | 2 - indexer/storage/Cargo.toml | 10 - indexer/storage/README.md | 5 - indexer/storage/src/lib.rs | 226 - 69 files changed, 33158 deletions(-) delete mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/deploy-lambdas.yml delete mode 100644 .github/workflows/lambda-ci.yml delete mode 100644 .github/workflows/lambda-dev-pipeline.yml delete mode 100644 .github/workflows/lambda-prod-pipeline.yml delete mode 100644 .github/workflows/test-lambdas.yml delete mode 100644 indexer-js-queue-handler/.gitignore delete mode 100644 indexer-js-queue-handler/README.md delete mode 100644 indexer-js-queue-handler/__snapshots__/hasura-client.test.js.snap delete mode 100644 indexer-js-queue-handler/__snapshots__/indexer.test.js.snap delete mode 100644 indexer-js-queue-handler/__snapshots__/metrics.test.js.snap delete mode 100644 indexer-js-queue-handler/__snapshots__/provisioner.test.js.snap delete mode 100644 indexer-js-queue-handler/handler.js delete mode 100644 indexer-js-queue-handler/handler.test.js delete mode 100644 indexer-js-queue-handler/hasura-client.js delete mode 100644 indexer-js-queue-handler/hasura-client.test.js delete mode 100644 indexer-js-queue-handler/indexer.integration.test.js delete mode 100644 indexer-js-queue-handler/indexer.js delete mode 100644 indexer-js-queue-handler/indexer.test.js delete mode 100644 indexer-js-queue-handler/jest.config.js delete mode 100644 indexer-js-queue-handler/metrics.js delete mode 100644 indexer-js-queue-handler/metrics.test.js delete mode 100644 indexer-js-queue-handler/package-lock.json delete mode 100644 indexer-js-queue-handler/package.json delete mode 100644 indexer-js-queue-handler/pg-client.js delete mode 100644 indexer-js-queue-handler/provisioner.js delete mode 100644 indexer-js-queue-handler/provisioner.test.js delete mode 100644 indexer-js-queue-handler/scripts/migrate-schema-to-db.js delete mode 100644 indexer-js-queue-handler/scripts/provision-user-dbs.js delete mode 100644 indexer-js-queue-handler/serverless.yml delete mode 100644 indexer-js-queue-handler/social-lag-metrics-writer.js delete mode 100644 indexer-js-queue-handler/test_payload.json delete mode 100644 indexer-js-queue-handler/trace-fetch.js delete mode 100644 indexer/.dockerignore delete mode 100644 indexer/Cargo.lock delete mode 100644 indexer/Cargo.toml delete mode 100644 indexer/Dockerfile delete mode 100644 indexer/README.md delete mode 100755 indexer/download_test_blocks.sh delete mode 100644 indexer/indexer_rule_type/Cargo.lock delete mode 100644 indexer/indexer_rule_type/Cargo.toml delete mode 100644 indexer/indexer_rule_type/src/indexer_rule.rs delete mode 100644 indexer/indexer_rule_type/src/lib.rs delete mode 100644 indexer/indexer_rules_engine/Cargo.toml delete mode 100644 indexer/indexer_rules_engine/README.md delete mode 100644 indexer/indexer_rules_engine/blocks/93085141.json delete mode 100644 indexer/indexer_rules_engine/src/lib.rs delete mode 100644 indexer/indexer_rules_engine/src/matcher.rs delete mode 100644 indexer/indexer_rules_engine/src/outcomes_reducer.rs delete mode 100644 indexer/indexer_rules_engine/src/types/events.rs delete mode 100644 indexer/indexer_rules_engine/src/types/indexer_rule_match.rs delete mode 100644 indexer/indexer_rules_engine/src/types/mod.rs delete mode 100644 indexer/indexer_rules_engine/src/types/transactions.rs delete mode 100644 indexer/queryapi_coordinator/Cargo.toml delete mode 100644 indexer/queryapi_coordinator/README.md delete mode 100644 indexer/queryapi_coordinator/src/historical_block_processing.rs delete mode 100644 indexer/queryapi_coordinator/src/historical_block_processing_integration_tests.rs delete mode 100644 indexer/queryapi_coordinator/src/indexer_reducer.rs delete mode 100644 indexer/queryapi_coordinator/src/indexer_registry.rs delete mode 100644 indexer/queryapi_coordinator/src/indexer_types.rs delete mode 100644 indexer/queryapi_coordinator/src/main.rs delete mode 100644 indexer/queryapi_coordinator/src/metrics.rs delete mode 100644 indexer/queryapi_coordinator/src/opts.rs delete mode 100644 indexer/queryapi_coordinator/src/s3.rs delete mode 100644 indexer/queryapi_coordinator/src/utils.rs delete mode 100644 indexer/rust-toolchain.toml delete mode 100644 indexer/storage/Cargo.toml delete mode 100644 indexer/storage/README.md delete mode 100644 indexer/storage/src/lib.rs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 6526f5a8f..000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Rust - -on: - push: - branches: [ main ] - paths: - - "indexer/**" - pull_request: - branches: [ main, stable ] - paths: - - "indexer/**" - -env: - CARGO_TERM_COLOR: always - -jobs: - check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Run check - working-directory: ./indexer - run: cargo check - - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Run check - working-directory: ./indexer - run: cargo test - - - rustfmt: - name: rustfmt - runs-on: ubuntu-20.04 - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.68.0 - override: true - profile: minimal - components: rustfmt - - name: Check formatting - working-directory: ./indexer - run: | - cargo fmt -- --check - - rustclippy: - name: rustclippy - runs-on: ubuntu-20.04 - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.68.0 - override: true - profile: minimal - components: clippy - - name: Clippy check - working-directory: ./indexer - run: | - cargo clippy diff --git a/.github/workflows/deploy-lambdas.yml b/.github/workflows/deploy-lambdas.yml deleted file mode 100644 index 29c53bc29..000000000 --- a/.github/workflows/deploy-lambdas.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Deploy Lambdas - -on: - workflow_call: - inputs: - working-directory: - required: true - type: string - description: Path to Serverless Lambda directory - environment: - required: true - type: string - description: Github environment to deploy to - -jobs: - deploy: - runs-on: ubuntu-latest - environment: ${{ inputs.environment }} - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: '16.x' - - - name: Install Node Dependencies - run: npm install - working-directory: ${{ inputs.working-directory }} - - - name: Serverless Deploy - run: ./node_modules/.bin/sls deploy --stage ${{ vars.SERVERLESS_STAGE_NAME }} - working-directory: ${{ inputs.working-directory }} - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - HASURA_ENDPOINT: ${{ vars.HASURA_ENDPOINT }} - HASURA_ENDPOINT_V2: ${{ vars.HASURA_ENDPOINT_V2 }} - HASURA_ADMIN_SECRET: ${{ secrets.HASURA_ADMIN_SECRET }} - PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} - PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} - PG_ADMIN_DATABASE: ${{ secrets.PG_ADMIN_DATABASE }} - PG_HOST: ${{ secrets.PG_HOST }} - PG_PORT: ${{ secrets.PG_PORT }} diff --git a/.github/workflows/lambda-ci.yml b/.github/workflows/lambda-ci.yml deleted file mode 100644 index b728becc0..000000000 --- a/.github/workflows/lambda-ci.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Lambda CI - -on: - pull_request: - paths: - - "indexer-js-queue-handler/**" - -jobs: - test: - uses: ./.github/workflows/test-lambdas.yml - with: - working-directory: ./indexer-js-queue-handler diff --git a/.github/workflows/lambda-dev-pipeline.yml b/.github/workflows/lambda-dev-pipeline.yml deleted file mode 100644 index cb4f3ef48..000000000 --- a/.github/workflows/lambda-dev-pipeline.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Deploy Dev Lambdas - -on: - push: - branches: [main] - paths: - - "indexer-js-queue-handler/**" - -jobs: - test: - uses: ./.github/workflows/test-lambdas.yml - with: - working-directory: ./indexer-js-queue-handler - - deploy: - uses: ./.github/workflows/deploy-lambdas.yml - needs: test - secrets: inherit - with: - working-directory: ./indexer-js-queue-handler - environment: LAMBDA_DEV diff --git a/.github/workflows/lambda-prod-pipeline.yml b/.github/workflows/lambda-prod-pipeline.yml deleted file mode 100644 index 001622317..000000000 --- a/.github/workflows/lambda-prod-pipeline.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Deploy Prod Lambdas - -on: - push: - branches: [stable] - paths: - - "indexer-js-queue-handler/**" - -jobs: - test: - uses: ./.github/workflows/test-lambdas.yml - with: - working-directory: ./indexer-js-queue-handler - - deploy: - uses: ./.github/workflows/deploy-lambdas.yml - needs: test - secrets: inherit - with: - working-directory: ./indexer-js-queue-handler - environment: LAMBDA_PROD diff --git a/.github/workflows/test-lambdas.yml b/.github/workflows/test-lambdas.yml deleted file mode 100644 index 0b9e507ff..000000000 --- a/.github/workflows/test-lambdas.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Test Lambdas - -on: - workflow_call: - inputs: - working-directory: - required: true - type: string - description: Path to Serverless Lambda directory - -jobs: - test: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: '16.x' - - - name: Install Node Dependencies - run: npm install - working-directory: ${{ inputs.working-directory }} - - - name: Run tests - run: npm test - working-directory: ${{ inputs.working-directory }} diff --git a/indexer-js-queue-handler/.gitignore b/indexer-js-queue-handler/.gitignore deleted file mode 100644 index 2c4448065..000000000 --- a/indexer-js-queue-handler/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.serverless diff --git a/indexer-js-queue-handler/README.md b/indexer-js-queue-handler/README.md deleted file mode 100644 index bdd67d90b..000000000 --- a/indexer-js-queue-handler/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# Query API Node SQS Consumer on AWS using Serverless Framework -Consume indexer queue that has been populated by queryapi-mvp/queue-handler-alertexer. -`handler.js` is the entry point for the Lambda function. -`indexer.js` has the indexing logic. - -### Operation and Testing - * You can write an indexer in the Data Indexing tab of a new NEAR Social (testnet) widget here https://near-social-query-api-demo.vercel.app/#/edit/ - * Fastest indexer iteration is to use call `runFunctions` in `src/indexer.test.js` by hardcoding your functino -as the first test in that file does. - -### Deployment -`queue-handler-queryapi` is deployed with `cargo lambda deploy` to https://us-west-2.console.aws.amazon.com/lambda/home?region=us-west-2#/functions/queue-handler-queryapi -It has two env vars set: - * `DATABASE_URL` which needs to be set to the database url for the queryapi (alertexer based) database - * `AGGREGATION_QUEUE_URL` with value https://sqs.us-west-2.amazonaws.com/754641474505/queryapi-dev-jobs - -`indexer-js-queue-handler` is deployed with `sls deploy --stage dev` to https://us-west-2.console.aws.amazon.com/lambda/home?region=us-west-2#/functions/queryapi-dev-jobsWorker - * Logs are here https://us-west-2.console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/$252Faws$252Flambda$252Fqueryapi-dev-jobsWorker -or when using the awslogs cli tool - * AWS_REGION=eu-central-1 awslogs get /aws/lambda/queryapi-dev-indexer-runnerWorker ALL --watch; - * AWS_REGION=eu-central-1 awslogs get /aws/lambda/queryapi-dev-startFromBlock-runnerWorker ALL --watch; - - -## VM2 Sandbox notes -https://www.npmjs.com/package/vm2 - -Supports requiring modules. -Uses `freeze` to prevent modification of the injected objects. - -Notes on Features that are not in use: - -`const vm = new VM({sandbox: {changeableObject: {}}});` sandbox values allow full mutability of the object - -The last statement in the sandboxed code is returned. We are using a passed in object for the return value but have the -option of returning it instead. -``` -const modifiedFunction = functions[key] + ';mutationsReturnValue;'; -const vmResult = vm.run(modifiedFunction); -console.log(vmResult); -``` - -**Notes on Security Testing for Modifiability** -Indexer function contains `mutationsReturnValue['hack'] = function() {return 'bad'}` -`console.log(vmResult.hack);` -The `freeze` function is used to prevent modification of the injected objects. - - ----- - -## Serverless framework SQS template -Note: the producer function described below has been removed. - - - -This template defines one function `producer` and one Lift construct - `jobs`. The producer function is triggered by `http` event type, accepts JSON payloads and sends it to a SQS queue for asynchronous processing. The SQS queue is created by the `jobs` queue construct of the Lift plugin. The queue is set up with a "dead-letter queue" (to receive failed messages) and a `worker` Lambda function that processes the SQS messages. - -To learn more: - -- about `http` event configuration options, refer to [http event docs](https://www.serverless.com/framework/docs/providers/aws/events/apigateway/) -- about the `queue` construct, refer to [the `queue` documentation in Lift](https://github.com/getlift/lift/blob/master/docs/queue.md) -- about the Lift plugin in general, refer to [the Lift project](https://github.com/getlift/lift) -- about SQS processing with AWS Lambda, please refer to the official [AWS documentation](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) - -### Deployment -``` -sls deploy --stage dev --aws-profile serverless-deploy -``` - -After running deploy, you should see output similar to: - -```bash -Deploying aws-node-sqs-worker-project to stage dev (us-east-1) - -✔ Service deployed to stack aws-node-sqs-worker-project-dev (175s) - -endpoint: POST - https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/produce -functions: - producer: aws-node-sqs-worker-project-dev-producer (167 kB) - jobsWorker: aws-node-sqs-worker-project-dev-jobsWorker (167 kB) -jobs: https://sqs.us-east-1.amazonaws.com/000000000000/aws-node-sqs-worker-project-dev-jobs -``` - - -_Note_: In current form, after deployment, your API is public and can be invoked by anyone. For production deployments, you might want to configure an authorizer. For details on how to do that, refer to [http event docs](https://www.serverless.com/framework/docs/providers/aws/events/apigateway/). - -### Invocation - -After successful deployment, you can now call the created API endpoint with `POST` request to invoke `producer` function: - -```bash -curl --request POST 'https://wfz6gyheai.execute-api.us-west-2.amazonaws.com/produce' --header 'Content-Type: application/json' --data-raw '{"name": "John"}' -``` - -In response, you should see output similar to: - -```bash -{"message": "Message accepted!"} -``` diff --git a/indexer-js-queue-handler/__snapshots__/hasura-client.test.js.snap b/indexer-js-queue-handler/__snapshots__/hasura-client.test.js.snap deleted file mode 100644 index 0da09c522..000000000 --- a/indexer-js-queue-handler/__snapshots__/hasura-client.test.js.snap +++ /dev/null @@ -1,400 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`HasuraClient adds a datasource 1`] = ` -{ - "args": { - "configuration": { - "connection_info": { - "database_url": { - "connection_parameters": { - "database": "morgs_near", - "host": "localhost", - "password": "password", - "port": 5432, - "username": "morgs_near", - }, - }, - }, - }, - "name": "morgs_near", - }, - "type": "pg_add_source", -} -`; - -exports[`HasuraClient adds the specified permissions for the specified roles/table/schema 1`] = ` -{ - "args": [ - { - "args": { - "permission": { - "allow_aggregations": true, - "check": {}, - "columns": "*", - "computed_fields": [], - "filter": {}, - }, - "role": "role", - "source": "default", - "table": { - "name": "height", - "schema": "schema", - }, - }, - "type": "pg_create_select_permission", - }, - { - "args": { - "permission": { - "check": {}, - "columns": "*", - "computed_fields": [], - "filter": {}, - }, - "role": "role", - "source": "default", - "table": { - "name": "height", - "schema": "schema", - }, - }, - "type": "pg_create_insert_permission", - }, - { - "args": { - "permission": { - "check": {}, - "columns": "*", - "computed_fields": [], - "filter": {}, - }, - "role": "role", - "source": "default", - "table": { - "name": "height", - "schema": "schema", - }, - }, - "type": "pg_create_update_permission", - }, - { - "args": { - "permission": { - "check": {}, - "columns": "*", - "computed_fields": [], - "filter": {}, - }, - "role": "role", - "source": "default", - "table": { - "name": "height", - "schema": "schema", - }, - }, - "type": "pg_create_delete_permission", - }, - { - "args": { - "permission": { - "allow_aggregations": true, - "check": {}, - "columns": "*", - "computed_fields": [], - "filter": {}, - }, - "role": "role", - "source": "default", - "table": { - "name": "width", - "schema": "schema", - }, - }, - "type": "pg_create_select_permission", - }, - { - "args": { - "permission": { - "check": {}, - "columns": "*", - "computed_fields": [], - "filter": {}, - }, - "role": "role", - "source": "default", - "table": { - "name": "width", - "schema": "schema", - }, - }, - "type": "pg_create_insert_permission", - }, - { - "args": { - "permission": { - "check": {}, - "columns": "*", - "computed_fields": [], - "filter": {}, - }, - "role": "role", - "source": "default", - "table": { - "name": "width", - "schema": "schema", - }, - }, - "type": "pg_create_update_permission", - }, - { - "args": { - "permission": { - "check": {}, - "columns": "*", - "computed_fields": [], - "filter": {}, - }, - "role": "role", - "source": "default", - "table": { - "name": "width", - "schema": "schema", - }, - }, - "type": "pg_create_delete_permission", - }, - ], - "type": "bulk", -} -`; - -exports[`HasuraClient checks if a schema exists within source 1`] = ` -[ - [ - "mock-hasura-endpoint/v2/query", - { - "body": "{"type":"run_sql","args":{"sql":"SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'schema'","read_only":true,"source":"source"}}", - "headers": { - "X-Hasura-Admin-Secret": "mock-hasura-admin-secret", - }, - "method": "POST", - }, - ], -] -`; - -exports[`HasuraClient checks if datasource exists 1`] = ` -{ - "args": {}, - "type": "export_metadata", - "version": 2, -} -`; - -exports[`HasuraClient creates a schema 1`] = ` -[ - [ - "mock-hasura-endpoint/v2/query", - { - "body": "{"type":"run_sql","args":{"sql":"CREATE schema schemaName","read_only":false,"source":"dbName"}}", - "headers": { - "X-Hasura-Admin-Secret": "mock-hasura-admin-secret", - }, - "method": "POST", - }, - ], -] -`; - -exports[`HasuraClient gets table names within a schema 1`] = ` -{ - "args": { - "source": "source", - }, - "type": "pg_get_source_tables", -} -`; - -exports[`HasuraClient runs migrations for the specified schema 1`] = ` -[ - [ - "mock-hasura-endpoint/v2/query", - { - "body": "{"type":"run_sql","args":{"sql":"\\n set schema 'schemaName';\\n CREATE TABLE blocks (height numeric)\\n ","read_only":false,"source":"dbName"}}", - "headers": { - "X-Hasura-Admin-Secret": "mock-hasura-admin-secret", - }, - "method": "POST", - }, - ], -] -`; - -exports[`HasuraClient tracks foreign key relationships 1`] = ` -{ - "args": { - "read_only": true, - "source": "default", - "sql": " - SELECT - COALESCE(json_agg(row_to_json(info)), '[]'::JSON) - FROM ( - SELECT - q.table_schema::text AS table_schema, - q.table_name::text AS table_name, - q.constraint_name::text AS constraint_name, - min(q.ref_table_table_schema::text) AS ref_table_table_schema, - min(q.ref_table::text) AS ref_table, - json_object_agg(ac.attname, afc.attname) AS column_mapping, - min(q.confupdtype::text) AS on_update, - min(q.confdeltype::text) AS - on_delete - FROM ( - SELECT - ctn.nspname AS table_schema, - ct.relname AS table_name, - r.conrelid AS table_id, - r.conname AS constraint_name, - cftn.nspname AS ref_table_table_schema, - cft.relname AS ref_table, - r.confrelid AS ref_table_id, - r.confupdtype, - r.confdeltype, - unnest(r.conkey) AS column_id, - unnest(r.confkey) AS ref_column_id - FROM - pg_constraint r - JOIN pg_class ct ON r.conrelid = ct.oid - JOIN pg_namespace ctn ON ct.relnamespace = ctn.oid - JOIN pg_class cft ON r.confrelid = cft.oid - JOIN pg_namespace cftn ON cft.relnamespace = cftn.oid - WHERE - r.contype = 'f'::"char" - AND ((ctn.nspname='public')) - ) q - JOIN pg_attribute ac ON q.column_id = ac.attnum - AND q.table_id = ac.attrelid - JOIN pg_attribute afc ON q.ref_column_id = afc.attnum - AND q.ref_table_id = afc.attrelid - GROUP BY - q.table_schema, - q.table_name, - q.constraint_name) AS info; - ", - }, - "type": "run_sql", -} -`; - -exports[`HasuraClient tracks foreign key relationships 2`] = ` -{ - "args": [ - { - "args": { - "name": "comments", - "table": { - "name": "posts", - "schema": "public", - }, - "using": { - "foreign_key_constraint_on": { - "column": "post_id", - "table": { - "name": "comments", - "schema": "public", - }, - }, - }, - }, - "type": "pg_create_array_relationship", - }, - { - "args": { - "name": "post", - "table": { - "name": "comments", - "schema": "public", - }, - "using": { - "foreign_key_constraint_on": "post_id", - }, - }, - "type": "pg_create_object_relationship", - }, - { - "args": { - "name": "post_likes", - "table": { - "name": "posts", - "schema": "public", - }, - "using": { - "foreign_key_constraint_on": { - "column": "post_id", - "table": { - "name": "post_likes", - "schema": "public", - }, - }, - }, - }, - "type": "pg_create_array_relationship", - }, - { - "args": { - "name": "post", - "table": { - "name": "post_likes", - "schema": "public", - }, - "using": { - "foreign_key_constraint_on": "post_id", - }, - }, - "type": "pg_create_object_relationship", - }, - ], - "type": "bulk", -} -`; - -exports[`HasuraClient tracks the specified tables for a specified schema 1`] = ` -{ - "args": [ - { - "args": { - "table": { - "name": "height", - "schema": "schema", - }, - }, - "type": "pg_track_table", - }, - { - "args": { - "table": { - "name": "width", - "schema": "schema", - }, - }, - "type": "pg_track_table", - }, - ], - "type": "bulk", -} -`; - -exports[`HasuraClient untracks the specified tables 1`] = ` -[ - [ - "mock-hasura-endpoint/v1/metadata", - { - "body": "{"type":"bulk","args":[{"type":"pg_untrack_table","args":{"table":{"schema":"schema","name":"height"},"source":"default","cascade":true}},{"type":"pg_untrack_table","args":{"table":{"schema":"schema","name":"width"},"source":"default","cascade":true}}]}", - "headers": { - "X-Hasura-Admin-Secret": "mock-hasura-admin-secret", - }, - "method": "POST", - }, - ], -] -`; diff --git a/indexer-js-queue-handler/__snapshots__/indexer.test.js.snap b/indexer-js-queue-handler/__snapshots__/indexer.test.js.snap deleted file mode 100644 index c92566108..000000000 --- a/indexer-js-queue-handler/__snapshots__/indexer.test.js.snap +++ /dev/null @@ -1,384 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Indexer unit tests Indexer.buildImperativeContextForFunction() can fetch from the near social api 1`] = ` -[ - [ - "https://api.near.social/index", - { - "body": "{"action":"post","key":"main","options":{"limit":1,"order":"desc"}}", - "headers": { - "Content-Type": "application/json", - }, - "method": "POST", - }, - ], -] -`; - -exports[`Indexer unit tests Indexer.runFunctions() allows imperative execution of GraphQL operations 1`] = ` -[ - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"buildnear.testnet/test","block_height":82699904,"message":"Running function buildnear.testnet/test, lag is: NaNms from block timestamp"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation SetStatus($function_name: String, $status: String) {\\n insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) {\\n function_name\\n status\\n }\\n }\\n ","variables":{"function_name":"buildnear.testnet/test","status":"RUNNING"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n query {\\n posts(where: { id: { _eq: 1 } }) {\\n id\\n }\\n }\\n "}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "buildnear_testnet", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation {\\n insert_comments(\\n objects: {account_id: \\"morgs.near\\", block_height: 82699904, content: \\"cool post\\", post_id: 1}\\n ) {\\n returning {\\n id\\n }\\n }\\n }\\n "}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "buildnear_testnet", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation WriteBlock($function_name: String!, $block_height: numeric!) {\\n insert_indexer_state(\\n objects: {current_block_height: $block_height, function_name: $function_name}\\n on_conflict: {constraint: indexer_state_pkey, update_columns: current_block_height}\\n ) {\\n returning {\\n current_block_height\\n function_name\\n }\\n }\\n }","variables":{"function_name":"buildnear.testnet/test","block_height":82699904}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], -] -`; - -exports[`Indexer unit tests Indexer.runFunctions() catches errors 1`] = ` -[ - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"buildnear.testnet/test","block_height":456,"message":"Running function buildnear.testnet/test, lag is: NaNms from block timestamp"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation SetStatus($function_name: String, $status: String) {\\n insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) {\\n function_name\\n status\\n }\\n }\\n ","variables":{"function_name":"buildnear.testnet/test","status":"RUNNING"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"buildnear.testnet/test","block_height":456,"message":"Error running IndexerFunction:boom"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation SetStatus($function_name: String, $status: String) {\\n insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) {\\n function_name\\n status\\n }\\n }\\n ","variables":{"function_name":"buildnear.testnet/test","status":"STOPPED"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], -] -`; - -exports[`Indexer unit tests Indexer.runFunctions() logs provisioning failures 1`] = ` -[ - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"morgs.near/test","block_height":82699904,"message":"Running function morgs.near/test, lag is: NaNms from block timestamp"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation SetStatus($function_name: String, $status: String) {\\n insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) {\\n function_name\\n status\\n }\\n }\\n ","variables":{"function_name":"morgs.near/test","status":"PROVISIONING"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"morgs.near/test","block_height":82699904,"message":"Provisioning endpoint: starting"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"morgs.near/test","block_height":82699904,"message":"Provisioning endpoint: failure:something went wrong with provisioning"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation SetStatus($function_name: String, $status: String) {\\n insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) {\\n function_name\\n status\\n }\\n }\\n ","variables":{"function_name":"morgs.near/test","status":"STOPPED"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], -] -`; - -exports[`Indexer unit tests Indexer.runFunctions() sets the current historical block height 1`] = ` -[ - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"buildnear.testnet/test","block_height":456,"message":"Running function buildnear.testnet/test historical backfill"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation SetStatus($function_name: String, $status: String) {\\n insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) {\\n function_name\\n status\\n }\\n }\\n ","variables":{"function_name":"buildnear.testnet/test","status":"RUNNING"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"buildnear.testnet/test","block_height":456,"message":"hey"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation WriteBlock($function_name: String!, $block_height: numeric!) {\\n insert_indexer_state(\\n objects: {current_historical_block_height: $block_height, current_block_height: 0, function_name: $function_name}\\n on_conflict: {constraint: indexer_state_pkey, update_columns: current_historical_block_height}\\n ) {\\n returning {\\n current_block_height\\n current_historical_block_height\\n function_name\\n }\\n }\\n }\\n ","variables":{"function_name":"buildnear.testnet/test","block_height":456}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], -] -`; - -exports[`Indexer unit tests Indexer.runFunctions() should execute all functions against the current block 1`] = ` -[ - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"buildnear.testnet/test","block_height":456,"message":"Running function buildnear.testnet/test, lag is: NaNms from block timestamp"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation SetStatus($function_name: String, $status: String) {\\n insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) {\\n function_name\\n status\\n }\\n }\\n ","variables":{"function_name":"buildnear.testnet/test","status":"RUNNING"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation { set(functionName: \\"buildnear.testnet/test\\", key: \\"height\\", data: \\"456\\")}","variables":{}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "buildnear_testnet", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation WriteBlock($function_name: String!, $block_height: numeric!) {\\n insert_indexer_state(\\n objects: {current_block_height: $block_height, function_name: $function_name}\\n on_conflict: {constraint: indexer_state_pkey, update_columns: current_block_height}\\n ) {\\n returning {\\n current_block_height\\n function_name\\n }\\n }\\n }","variables":{"function_name":"buildnear.testnet/test","block_height":456}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], -] -`; - -exports[`Indexer unit tests Indexer.runFunctions() supplies the required role to the GraphQL endpoint 1`] = ` -[ - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id}\\n }","variables":{"function_name":"morgs.near/test","block_height":82699904,"message":"Running function morgs.near/test, lag is: NaNms from block timestamp"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"\\n mutation SetStatus($function_name: String, $status: String) {\\n insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) {\\n function_name\\n status\\n }\\n }\\n ","variables":{"function_name":"morgs.near/test","status":"RUNNING"}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation { set(functionName: \\"buildnear.testnet/test\\", key: \\"height\\", data: \\"82699904\\")}","variables":{}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "morgs_near", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], - [ - "mock-hasura-endpoint/v1/graphql", - { - "body": "{"query":"mutation WriteBlock($function_name: String!, $block_height: numeric!) {\\n insert_indexer_state(\\n objects: {current_block_height: $block_height, function_name: $function_name}\\n on_conflict: {constraint: indexer_state_pkey, update_columns: current_block_height}\\n ) {\\n returning {\\n current_block_height\\n function_name\\n }\\n }\\n }","variables":{"function_name":"morgs.near/test","block_height":82699904}}", - "headers": { - "Content-Type": "application/json", - "X-Hasura-Admin-Secret": "mock-hasura-secret", - "X-Hasura-Role": "append", - "X-Hasura-Use-Backend-Only-Permissions": "true", - }, - "method": "POST", - }, - ], -] -`; diff --git a/indexer-js-queue-handler/__snapshots__/metrics.test.js.snap b/indexer-js-queue-handler/__snapshots__/metrics.test.js.snap deleted file mode 100644 index ab32474fa..000000000 --- a/indexer-js-queue-handler/__snapshots__/metrics.test.js.snap +++ /dev/null @@ -1,34 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Metrics writes the block height for an indexer function 1`] = ` -[ - { - "MetricData": [ - { - "Dimensions": [ - { - "Name": "ACCOUNT_ID", - "Value": "morgs.near", - }, - { - "Name": "FUNCTION_NAME", - "Value": "test", - }, - { - "Name": "STAGE", - "Value": "dev", - }, - { - "Name": "EXECUTION_TYPE", - "Value": "real-time", - }, - ], - "MetricName": "INDEXER_FUNCTION_LATEST_BLOCK_HEIGHT", - "Unit": "None", - "Value": 2, - }, - ], - "Namespace": "test", - }, -] -`; diff --git a/indexer-js-queue-handler/__snapshots__/provisioner.test.js.snap b/indexer-js-queue-handler/__snapshots__/provisioner.test.js.snap deleted file mode 100644 index 406ca3cc0..000000000 --- a/indexer-js-queue-handler/__snapshots__/provisioner.test.js.snap +++ /dev/null @@ -1,18 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Provisioner provisionUserApi formats user input before executing the query 1`] = ` -[ - [ - "CREATE DATABASE "databaseName UNION SELECT * FROM users --"", - ], - [ - "CREATE USER morgs_near WITH PASSWORD 'pass; DROP TABLE users;--'", - ], - [ - "GRANT ALL PRIVILEGES ON DATABASE "databaseName UNION SELECT * FROM users --" TO morgs_near", - ], - [ - "REVOKE CONNECT ON DATABASE "databaseName UNION SELECT * FROM users --" FROM PUBLIC", - ], -] -`; diff --git a/indexer-js-queue-handler/handler.js b/indexer-js-queue-handler/handler.js deleted file mode 100644 index 52e90abd0..000000000 --- a/indexer-js-queue-handler/handler.js +++ /dev/null @@ -1,32 +0,0 @@ -import Indexer from "./indexer.js"; -import AWSXRay from "aws-xray-sdk"; -import AWS from "aws-sdk"; - -// Capture calls to AWS services in X-ray traces -AWSXRay.captureAWS(AWS); - -export const consumer = async (event) => { - const indexer = new Indexer('mainnet'); - - for (const record of event.Records) { - const jsonBody = JSON.parse(record.body); - const block_height = jsonBody.block_height; - const is_historical = jsonBody.is_historical; - const functions = {}; - - const function_config = jsonBody.indexer_function; - const code = function_config.code; - if (code.indexOf('context.db') >= 0) { - continue - } - - const function_name = function_config.account_id + '/' + function_config.function_name; - functions[function_name] = function_config; - - try { - const mutations = await indexer.runFunctions(block_height, functions, is_historical, {imperative: true, provision: true}); - } catch(e) { - console.error(e); - } - } -}; diff --git a/indexer-js-queue-handler/handler.test.js b/indexer-js-queue-handler/handler.test.js deleted file mode 100644 index 29ea39adc..000000000 --- a/indexer-js-queue-handler/handler.test.js +++ /dev/null @@ -1,47 +0,0 @@ -import {consumer} from './handler'; -import {jest} from '@jest/globals'; - -describe('consumer', () => { - jest.setTimeout(30000); - - const body = { - "chain_id": "Mainnet", - "indexer_rule_id": 1, - "indexer_rule_name": "Function set called in social.near", - "payload": { - "Actions": { - "block_hash": "BmuLkzmAT36wANBvdsDckFGUioJSZHdiYQRyh2WKRun9", - "receipt_id": "9CGkmYSMq6Bc1qVFjhQ8Au9gdYdsdr1zXZkNcPRgHvCj", - "transaction_hash": "6tyaAAkyJugueAssZn52S242MUTwtt89bPiokC8H5wDQ" - } - }, - "block_height": 86956588, - "function_name": "buildnear.testnest/test_demo_height", - "function_code": "{\"code\":\" const h = block.header().height; console.log('About to write demo_blockheight', h); context.set('test_demo_height', h) \",\"schema\":\"\\nCREATE TABLE key_value (\\n key text NOT NULL,\\n value text NOT NULL\\n);\\n\",\"start_block_height\":null}" - }; - const testEvent2 = { - "Records": [ - { - "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", - "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", - "body": JSON.stringify(body), - "attributes": { - "ApproximateReceiveCount": "1", - "SentTimestamp": "1545082649183", - "SenderId": "AIDAIENQZJOLO23YVJ4VO", - "ApproximateFirstReceiveTimestamp": "1545082649185" - }, - "messageAttributes": {}, - "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", - "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", - "awsRegion": "us-east-2" - } - ] - } - - test('consumer parses SQS message', async () => { - const result = await consumer(testEvent2); - expect(result).toEqual({"body": { "# of mutations applied": 1}, "statusCode": 200}); - }); -}); diff --git a/indexer-js-queue-handler/hasura-client.js b/indexer-js-queue-handler/hasura-client.js deleted file mode 100644 index 956e9d656..000000000 --- a/indexer-js-queue-handler/hasura-client.js +++ /dev/null @@ -1,298 +0,0 @@ -import fetch from 'node-fetch'; -import pluralize from 'pluralize'; - -export default class HasuraClient { - static DEFAULT_DATABASE = 'default'; - static DEFAULT_SCHEMA = 'public'; - - constructor( - deps - ) { - this.deps = { - fetch, - ...deps, - }; - } - - async executeSql(sql, opts) { - const response = await this.deps.fetch(`${process.env.HASURA_ENDPOINT}/v2/query`, { - method: 'POST', - headers: { - 'X-Hasura-Admin-Secret': process.env.HASURA_ADMIN_SECRET, - }, - body: JSON.stringify({ - type: 'run_sql', - args: { - sql, - read_only: opts.readOnly, - source: opts.source || 'default', - } - }), - }); - - const body = await response.text(); - - if (response.status !== 200) { - throw new Error(body); - } - - return JSON.parse(body) - }; - - async executeMetadataRequest (type, args, version) { - const response = await this.deps.fetch(`${process.env.HASURA_ENDPOINT}/v1/metadata`, { - method: 'POST', - headers: { - 'X-Hasura-Admin-Secret': process.env.HASURA_ADMIN_SECRET, - }, - body: JSON.stringify({ - type, - args, - ...(version && { version }) - }), - }); - - const body = await response.text(); - - if (response.status !== 200) { - throw new Error(body); - } - - return JSON.parse(body); - }; - - async executeBulkMetadataRequest (metadataRequests) { - return this.executeMetadataRequest('bulk', metadataRequests); - } - - async exportMetadata() { - const { metadata } = await this.executeMetadataRequest('export_metadata', {}, 2); - return metadata; - } - - async doesSourceExist(source) { - const metadata = await this.exportMetadata(); - return metadata.sources.filter(({ name }) => name === source).length > 0; - } - - async doesSchemaExist(source, schemaName) { - const { result } = await this.executeSql( - `SELECT schema_name FROM information_schema.schemata WHERE schema_name = '${schemaName}'`, - { source, readOnly: true } - ); - - return result.length > 1; - } - - createSchema (source, schemaName) { - return this.executeSql( - `CREATE schema ${schemaName}`, - { source, readOnly: false } - ); - } - - runMigrations(source, schemaName, migration) { - return this.executeSql( - ` - set schema '${schemaName}'; - ${migration} - `, - { source, readOnly: false } - ); - } - - async getTableNames(schemaName, source) { - const tablesInSource = await this.executeMetadataRequest( - 'pg_get_source_tables', - { - source - } - ); - - return tablesInSource - .filter(({ name, schema }) => schema === schemaName) - .map(({ name }) => name); - }; - - async trackTables(schemaName, tableNames, source) { - return this.executeBulkMetadataRequest( - tableNames.map((name) => ({ - type: 'pg_track_table', - args: { - source, - table: { - name, - schema: schemaName, - }, - } - })) - ); - } - - async untrackTables(source, schema, tableNames, cascade = true) { - return this.executeBulkMetadataRequest( - tableNames.map((name) => ({ - type: 'pg_untrack_table', - args: { - table: { - schema, - name, - }, - source, - cascade, - } - })) - ); - } - - async getForeignKeys(schemaName, source) { - const { result } = await this.executeSql( - ` - SELECT - COALESCE(json_agg(row_to_json(info)), '[]'::JSON) - FROM ( - SELECT - q.table_schema::text AS table_schema, - q.table_name::text AS table_name, - q.constraint_name::text AS constraint_name, - min(q.ref_table_table_schema::text) AS ref_table_table_schema, - min(q.ref_table::text) AS ref_table, - json_object_agg(ac.attname, afc.attname) AS column_mapping, - min(q.confupdtype::text) AS on_update, - min(q.confdeltype::text) AS - on_delete - FROM ( - SELECT - ctn.nspname AS table_schema, - ct.relname AS table_name, - r.conrelid AS table_id, - r.conname AS constraint_name, - cftn.nspname AS ref_table_table_schema, - cft.relname AS ref_table, - r.confrelid AS ref_table_id, - r.confupdtype, - r.confdeltype, - unnest(r.conkey) AS column_id, - unnest(r.confkey) AS ref_column_id - FROM - pg_constraint r - JOIN pg_class ct ON r.conrelid = ct.oid - JOIN pg_namespace ctn ON ct.relnamespace = ctn.oid - JOIN pg_class cft ON r.confrelid = cft.oid - JOIN pg_namespace cftn ON cft.relnamespace = cftn.oid - WHERE - r.contype = 'f'::"char" - AND ((ctn.nspname='${schemaName}')) - ) q - JOIN pg_attribute ac ON q.column_id = ac.attnum - AND q.table_id = ac.attrelid - JOIN pg_attribute afc ON q.ref_column_id = afc.attnum - AND q.ref_table_id = afc.attrelid - GROUP BY - q.table_schema, - q.table_name, - q.constraint_name) AS info; - `, - { readOnly: true, source } - ); - - const [_, [foreignKeysJsonString]] = result; - - return JSON.parse(foreignKeysJsonString); - } - - async trackForeignKeyRelationships(schemaName, source) { - const foreignKeys = await this.getForeignKeys(schemaName, source); - - if (foreignKeys.length === 0) { - return; - } - - return this.executeBulkMetadataRequest( - foreignKeys - .map((foreignKey) => ([ - { - type: "pg_create_array_relationship", - args: { - source, - name: foreignKey.table_name, - table: { - name: foreignKey.ref_table, - schema: schemaName, - }, - using: { - foreign_key_constraint_on: { - table: { - name: foreignKey.table_name, - schema: schemaName, - }, - column: Object.keys(foreignKey.column_mapping)[0], - } - }, - } - }, - { - type: "pg_create_object_relationship", - args: { - source, - name: pluralize.singular(foreignKey.ref_table), - table: { - name: foreignKey.table_name, - schema: schemaName, - }, - using: { - foreign_key_constraint_on: Object.keys(foreignKey.column_mapping)[0], - }, - } - }, - ])) - .flat() - ); - } - - async addPermissionsToTables(schemaName, source, tableNames, roleName, permissions) { - return this.executeBulkMetadataRequest( - tableNames - .map((tableName) => ( - permissions.map((permission) => ({ - type: `pg_create_${permission}_permission`, - args: { - source, - table: { - name: tableName, - schema: schemaName, - }, - role: roleName, - permission: { - columns: '*', - check: {}, - computed_fields: [], - filter: {}, - ...(permission === "select" && { allow_aggregations: true }) - }, - }, - })) - )) - .flat() - ); - } - - async addDatasource(userName, password, databaseName) { - return this.executeMetadataRequest("pg_add_source", { - name: databaseName, - configuration: { - connection_info: { - database_url: { - connection_parameters: { - password, - database: databaseName, - username: userName, - host: process.env.PG_HOST, - port: Number(process.env.PG_PORT), - } - }, - }, - }, - }); - } -} diff --git a/indexer-js-queue-handler/hasura-client.test.js b/indexer-js-queue-handler/hasura-client.test.js deleted file mode 100644 index bb5f3940c..000000000 --- a/indexer-js-queue-handler/hasura-client.test.js +++ /dev/null @@ -1,247 +0,0 @@ -import { jest } from '@jest/globals'; - -import HasuraClient from './hasura-client' - -describe('HasuraClient', () => { - const oldEnv = process.env; - - const HASURA_ENDPOINT = 'mock-hasura-endpoint'; - const HASURA_ADMIN_SECRET = 'mock-hasura-admin-secret'; - const PG_HOST = 'localhost' - const PG_PORT = 5432 - - beforeAll(() => { - process.env = { - ...oldEnv, - HASURA_ENDPOINT, - HASURA_ADMIN_SECRET, - PG_HOST, - PG_PORT, - }; - }); - - afterAll(() => { - process.env = oldEnv; - }); - - it('creates a schema', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({}) - }); - const client = new HasuraClient({ fetch }) - - await client.createSchema('dbName', 'schemaName'); - - expect(fetch.mock.calls).toMatchSnapshot(); - }); - - it('checks if a schema exists within source', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({ - result: [['schema_name'], ['name']] - }) - }); - const client = new HasuraClient({ fetch }) - - const result = await client.doesSchemaExist('source', 'schema'); - - expect(result).toBe(true); - expect(fetch.mock.calls).toMatchSnapshot(); - }); - - it('checks if datasource exists', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({ - metadata: { - sources: [ - { - name: 'name' - } - ] - }, - }), - }); - const client = new HasuraClient({ fetch }) - - await expect(client.doesSourceExist('name')).resolves.toBe(true); - expect(fetch.mock.calls[0][1].headers['X-Hasura-Admin-Secret']).toBe(HASURA_ADMIN_SECRET) - expect(JSON.parse(fetch.mock.calls[0][1].body)).toMatchSnapshot(); - }) - - it('runs migrations for the specified schema', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({}) - }); - const client = new HasuraClient({ fetch }) - - await client.runMigrations('dbName', 'schemaName', 'CREATE TABLE blocks (height numeric)'); - - expect(fetch.mock.calls).toMatchSnapshot(); - }); - - it('gets table names within a schema', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify([ - { name: 'table_name', schema: 'morgs_near' }, - { name: 'height', schema: 'schema' }, - { name: 'width', schema: 'schema' } - ]) - }); - const client = new HasuraClient({ fetch }) - - const names = await client.getTableNames('schema', 'source'); - - expect(names).toEqual(['height', 'width']); - expect(fetch.mock.calls[0][1].headers['X-Hasura-Admin-Secret']).toBe(HASURA_ADMIN_SECRET) - expect(JSON.parse(fetch.mock.calls[0][1].body)).toMatchSnapshot(); - }); - - it('tracks the specified tables for a specified schema', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({}) - }); - const client = new HasuraClient({ fetch }) - - await client.trackTables('schema', ['height', 'width']); - - expect(fetch.mock.calls[0][1].headers['X-Hasura-Admin-Secret']).toBe(HASURA_ADMIN_SECRET) - expect(JSON.parse(fetch.mock.calls[0][1].body)).toMatchSnapshot(); - }); - - it('untracks the specified tables', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({}) - }); - const client = new HasuraClient({ fetch }) - - await client.untrackTables('default', 'schema', ['height', 'width']); - - expect(fetch.mock.calls).toMatchSnapshot(); - }); - - it('adds the specified permissions for the specified roles/table/schema', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({}) - }); - const client = new HasuraClient({ fetch }) - - await client.addPermissionsToTables('schema', 'default', ['height', 'width'], 'role', ['select', 'insert', 'update', 'delete']); - - expect(fetch.mock.calls[0][1].headers['X-Hasura-Admin-Secret']).toBe(HASURA_ADMIN_SECRET) - expect(JSON.parse(fetch.mock.calls[0][1].body)).toMatchSnapshot(); - }); - - it('adds a datasource', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({}) - }); - const client = new HasuraClient({ fetch }) - - await client.addDatasource('morgs_near', 'password', 'morgs_near'); - - expect(fetch.mock.calls[0][1].headers['X-Hasura-Admin-Secret']).toBe(HASURA_ADMIN_SECRET) - expect(JSON.parse(fetch.mock.calls[0][1].body)).toMatchSnapshot(); - }); - - it('tracks foreign key relationships', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({ - result: [ - [ - "coalesce" - ], - [ - JSON.stringify([ - { - table_schema: "public", - table_name: "comments", - constraint_name: "comments_post_id_fkey", - ref_table_table_schema: "public", - ref_table: "posts", - column_mapping: { - post_id: "id" - }, - on_update: "a", - on_delete: "a" - }, - { - table_schema: "public", - table_name: "post_likes", - constraint_name: "post_likes_post_id_fkey", - ref_table_table_schema: "public", - ref_table: "posts", - column_mapping: { - post_id: "id" - }, - on_update: "a", - on_delete: "c" - } - ]) - ] - ] - }), - }); - const client = new HasuraClient({ fetch }) - - const result = await client.trackForeignKeyRelationships('public'); - - expect(fetch.mock.calls[0][1].headers['X-Hasura-Admin-Secret']).toBe(HASURA_ADMIN_SECRET) - expect(JSON.parse(fetch.mock.calls[0][1].body)).toMatchSnapshot(); - - expect(fetch.mock.calls[1][1].headers['X-Hasura-Admin-Secret']).toBe(HASURA_ADMIN_SECRET) - expect(JSON.parse(fetch.mock.calls[1][1].body)).toMatchSnapshot(); - }); - - it('skips foreign key tracking if none exist', async () => { - const fetch = jest - .fn() - .mockResolvedValue({ - status: 200, - text: () => JSON.stringify({ - result: [ - [ - "coalesce" - ], - [ - JSON.stringify([]) - ] - ] - }), - }); - const client = new HasuraClient({ fetch }) - - const result = await client.trackForeignKeyRelationships('public'); - - expect(fetch).toBeCalledTimes(1); // to fetch the foreign keys - }) -}); diff --git a/indexer-js-queue-handler/indexer.integration.test.js b/indexer-js-queue-handler/indexer.integration.test.js deleted file mode 100644 index 1117863fa..000000000 --- a/indexer-js-queue-handler/indexer.integration.test.js +++ /dev/null @@ -1,241 +0,0 @@ -import Indexer from './indexer'; -import fetch from 'node-fetch'; - -const mockAwsXray = { - resolveSegment: () => ({ - addError: () => {}, - close: () => {}, - addAnnotation: () => {}, - addNewSubsegment: () => ({ - addAnnotation: () => {}, - close: () => {} - }), - }), - getSegment: () => ({ - addAnnotation: () => {}, - addNewSubsegment: () => ({ - addAnnotation: () => {}, - close: () => {} - }), - }), -}; - -const mockMetrics = { - putBlockHeight: () => {}, -}; - - -/** These tests require the following Environment Variables to be set: HASURA_ENDPOINT, HASURA_ADMIN_SECRET */ -describe('Indexer integration tests', () => { - - test('Indexer.runFunctions() should execute an imperative style test function against a given block using key-value storage', async () => { - const indexer = new Indexer('mainnet', { fetch: fetch, awsXray: mockAwsXray, metrics: mockMetrics }); - const functions = {}; - functions['buildnear.testnet/itest1'] = {provisioned: false, code: 'context.set("BlockHeight", block.header().height);', schema: 'create table indexer_storage (function_name text, key_name text, value text, primary key (function_name, key_name));'}; - const block_height = 85376002; - const r = await indexer.runFunctions(block_height, functions, {imperative: true, provision: true}); - const valueSet = await indexer.runGraphQLQuery('query MyQuery {\n' + - ' buildnear_testnet_itest1_indexer_storage(\n' + - ' where: {key_name: {_eq: "BlockHeight"}, function_name: {_eq: "buildnear.testnet/itest1"}}\n' + - ' ) {\n' + - ' value\n' + - ' }\n' + - '}', {}, 'buildnear.testnet/itest1', '85376002', 'buildnear_testnet'); - expect(valueSet.buildnear_testnet_itest1_indexer_storage[0].value).toEqual("85376002"); - }, 30000); - - test('Indexer.runFunctions() should execute a test function against a given block using key-value storage', async () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - const functions = {}; - functions['buildnear.testnet/itest1'] = {code: 'context.set("BlockHeight", block.header().height);'}; - const block_height = 85376546; - const mutations = await indexer.runFunctions(block_height, functions, {provision: true}); - expect(mutations[0]).toEqual(`mutation writeKeyValues($function_name: String!, $key_name0: String!, $value0: String!) { - _0: insert_buildnear_testnet_itest1_indexer_storage_one(object: {function_name: $function_name, key_name: $key_name0, value: $value0} on_conflict: {constraint: indexer_storage_pkey, update_columns: value}) {key_name} - }`); - }, 30000); - - test('Indexer.runFunctions() should execute a test function against a given block using a full mutation to write to key-value storage', async () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - const functions = {}; - functions['buildnear.testnet/itest1'] = {code: 'context.graphql(`mutation { insert_buildnear_testnet_itest1_indexer_storage_one(object: {function_name: "buildnear.testnet/itest3", key_name: "BlockHeight", value: "${block.header().height}"} on_conflict: {constraint: indexer_storage_pkey, update_columns: value}) {key_name}}`);'}; - const block_height = 85376546; - const mutations = await indexer.runFunctions(block_height, functions, {provision: true}); - expect(mutations[0]).toBeDefined() - expect(JSON.stringify(mutations[0])).toContain("insert_buildnear_testnet_itest1_indexer_storage_one"); - }, 30000); - - /** Note that the on_conflict block in the mutation is for test repeatability. - * The posts table has had its unique index dropped and replaced with a unique constraint - * due to known Hasura issues with unique indexes vs unique constraints */ - test('Indexer.runFunctions() should execute a near social function against a given block', async () => { - - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - const functions = {}; - functions['buildnear.testnet/test'] = {code: - -` const SOCIAL_DB = 'social.near'; - function base64decode(encodedValue) { - let buff = Buffer.from(encodedValue, 'base64'); - return JSON.parse(buff.toString('utf-8')); - } - - const nearSocialPosts = block - .actions() - .filter(action => action.receiverId === SOCIAL_DB) - .flatMap(action => - action - .operations - .map(operation => operation['FunctionCall']) - .filter(operation => operation?.methodName === 'set') - .map(functionCallOperation => ({ - ...functionCallOperation, - args: base64decode(functionCallOperation.args), - receiptId: action.receiptId, - })) - .filter(functionCall => { - const accountId = Object.keys(functionCall.args.data)[0]; - return functionCall.args.data[accountId].post - || functionCall.args.data[accountId].index; - }) - ); - if (nearSocialPosts.length > 0) { - const blockHeight = block.blockHeight; - const blockTimestamp = block.header().timestampNanosec; - nearSocialPosts.forEach(postAction => { - const accountId = Object.keys(postAction.args.data)[0]; - if (postAction.args.data[accountId].post && postAction.args.data[accountId].post.main) { - const postData = {account_id: accountId, block_height: blockHeight, block_timestamp: blockTimestamp, - receipt_id: postAction.receiptId, post: postAction.args.data[accountId].post.main - }; - const mutationData = { post: { account_id: accountId, block_height: postData.block_height, - block_timestamp: postData.block_timestamp, receipt_id: postData.receipt_id, - content: postData.post}}; - context.graphql('mutation createPost($post:buildnear_testnet_test_posts_insert_input!) {' + - 'insert_buildnear_testnet_test_posts_one(object: $post on_conflict: {constraint: posts_pkey, update_columns: content}) { account_id, block_height } }', - mutationData); - } - }); - }`, - schema: `create table posts (account_id text, block_height bigint, block_timestamp bigint, receipt_id text, content text, primary key (account_id, block_height));` - }; - - const block_height = 85242526; // post, // 84940247; // comment - const returnValue = await indexer.runFunctions(block_height, functions, {provision: true}); - - console.log(returnValue); - expect(returnValue.length).toEqual(1); - expect(returnValue[0]).toContain("mutation createPost($post:buildnear_testnet_test_posts_insert_input!) {insert_buildnear_testnet_test_posts_one(object: $post on_conflict: {constraint: posts_pkey, update_columns: content}) { account_id, block_height } }"); - }, 30000); - - /** Note that the on_conflict block in the mutation is for test repeatability. - * The comments table has had its unique index dropped and replaced with a unique constraint - * due to known Hasura issues with unique indexes vs unique constraints */ - // needs update to have schema - test.skip('Indexer.runFunctions() should execute an imperative style near social function against a given block', async () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - const functions = {}; - - functions['buildnear.testnet/itest5'] = {code:` - const { posts } = await context.graphql(\` - query { - buildnear_testnet_itest5_posts(where: { id: { _eq: 2 } }) { - id - } - } - \`); - - if (posts.length === 0) { - return; - } - - const [post] = posts; - - const { insert_buildnear_testnet_itest5_comments: { returning: { id } } } = await context.graphql(\` - mutation { - insert_buildnear_testnet_itest5_comments( - objects: { account_id: "buildnear.testnet", content: "cool post", post_id: \${post.id}, - block_height: \${block.blockHeight}, block_timestamp: \${block.blockHeight}, - receipt_id: "12345" } - on_conflict: {constraint: comments_post_id_account_id_block_height_key, update_columns: block_timestamp} - ) { - returning { - id - } - } - } - \`); - - return (\`Created comment \${id} on post \${post.id}\`) - `}; - - const block_height = 85376002; - await indexer.runFunctions(block_height, functions, {imperative: true}); - const valueSet = await indexer.runGraphQLQuery('query MyQuery {\n' + - ' buildnear_testnet_itest5_comments(where: {account_id: {_eq: "buildnear.testnet"}}) {\n' + - ' id\n' + - ' post_id\n' + - ' }\n' + - '}', {}, 'buildnear.testnet/itest5', '1234', 'append'); - expect(valueSet.comments[0].post_id).toEqual(2); - }); - - test("writeLog() should write a log to the database", async () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - const id = await indexer.writeLog("buildnear.testnet/itest", 85376002, "test message"); - expect(id).toBeDefined(); - expect(id.length).toBe(36); - }); - - test("writeFunctionState should write a function state to the database", async () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - const result = await indexer.writeFunctionState("buildnear.testnet/itest8", 85376002); - expect(result).toBeDefined(); - expect(result.insert_indexer_state.returning[0].current_block_height).toBe(85376002); - }); - - // Errors are now exposed to the lambda hander. This test will be relevant again if this changes. - test.skip ("function that throws an error should catch the error", async () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = {}; - functions['buildnear.testnet/test'] = {code:` - throw new Error('boom'); - `}; - const block_height = 85376002; - - await indexer.runFunctions(block_height, functions); - // no error thrown is success - }); - - // Errors are now exposed to the lambda hander. This test will be relevant again if this changes. - test.skip("rejected graphql promise is awaited and caught", async () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = {}; - functions['buildnear.testnet/itest3'] = {code: - 'await context.graphql(`mutation { incorrect_function_call()`);'}; - const block_height = 85376002; - - await indexer.runFunctions(block_height, functions, {imperative: true}); - // no error thrown is success - }); - - // Unreturned promise rejection seems to be uncatchable even with process.on('unhandledRejection' - // However, the next function is run (in this test but not on Lambda). - test.skip("function that rejects a promise should catch the error", async () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = {}; - functions['buildnear.testnet/fails'] = {code:` - Promise.reject('rejected promise'); - `}; - functions['buildnear.testnet/succeeds'] = {code:` - console.log('Post promise rejection function succeeded'); - `}; - const block_height = 85376002; - - await indexer.runFunctions(block_height, functions); - }); -}); - diff --git a/indexer-js-queue-handler/indexer.js b/indexer-js-queue-handler/indexer.js deleted file mode 100644 index 8103ff6e1..000000000 --- a/indexer-js-queue-handler/indexer.js +++ /dev/null @@ -1,427 +0,0 @@ -import { connect } from "near-api-js"; -import fetch from 'node-fetch'; -import { VM } from 'vm2'; -import AWS from 'aws-sdk'; -import { Block } from '@near-lake/primitives' - -import Provisioner from './provisioner.js' -import AWSXRay from "aws-xray-sdk"; -import traceFetch from "./trace-fetch.js"; -import Metrics from './metrics.js' - -export default class Indexer { - - DEFAULT_HASURA_ROLE; - - constructor( - network, - deps - ) { - this.DEFAULT_HASURA_ROLE = 'append'; - this.network = network; - this.aws_region = process.env.REGION; - this.deps = { - fetch: traceFetch(fetch), - s3: new AWS.S3({ region: process.env.REGION }), - metrics: new Metrics('QueryAPI'), - provisioner: new Provisioner(), - awsXray: AWSXRay, - ...deps, - }; - } - - async runFunctions(block_height, functions, is_historical, options = { imperative: false, provision: false }) { - const blockWithHelpers = Block.fromStreamerMessage(await this.fetchStreamerMessage(block_height)); - - let lag = Date.now() - Math.floor(blockWithHelpers.header().timestampNanosec / 1000000); - const simultaneousPromises = []; - const allMutations = []; - for (const function_name in functions) { - try { - const indexerFunction = functions[function_name]; - const runningMessage = `Running function ${function_name}` + (is_historical ? ' historical backfill' : `, lag is: ${lag?.toString()}ms from block timestamp`); - console.log(runningMessage); // Lambda logs - const segment = this.deps.awsXray.getSegment(); // segment is immutable, subsegments are mutable - const functionSubsegment = segment.addNewSubsegment('indexer_function'); - functionSubsegment.addAnnotation('indexer_function', function_name); - simultaneousPromises.push(this.writeLog(function_name, block_height, runningMessage)); - - simultaneousPromises.push(this.deps.metrics.putBlockHeight(indexerFunction.account_id, indexerFunction.function_name, is_historical, block_height)); - - const hasuraRoleName = function_name.split('/')[0].replace(/[.-]/g, '_'); - const functionNameWithoutAccount = function_name.split('/')[1].replace(/[.-]/g, '_'); - - if (options.provision && !indexerFunction["provisioned"]) { - try { - if (!await this.deps.provisioner.isUserApiProvisioned(indexerFunction.account_id, indexerFunction.function_name)) { - await this.setStatus(function_name, block_height, 'PROVISIONING'); - simultaneousPromises.push(this.writeLog(function_name, block_height, 'Provisioning endpoint: starting')); - - await this.deps.provisioner.provisionUserApi(indexerFunction.account_id, indexerFunction.function_name, indexerFunction.schema); - - simultaneousPromises.push(this.writeLog(function_name, block_height, 'Provisioning endpoint: successful')); - } - } catch (err) { - simultaneousPromises.push(this.writeLog(function_name, block_height, 'Provisioning endpoint: failure', err.message)); - throw err; - } - } - - await this.setStatus(function_name, block_height, 'RUNNING'); - - const vm = new VM({timeout: 3000, allowAsync: true}); - const mutationsReturnValue = {mutations: [], variables: {}, keysValues: {}}; - const context = options.imperative - ? this.buildImperativeContextForFunction(function_name, functionNameWithoutAccount, block_height, hasuraRoleName, is_historical) - : this.buildFunctionalContextForFunction(mutationsReturnValue, function_name, block_height); - - vm.freeze(blockWithHelpers, 'block'); - vm.freeze(context, 'context'); - vm.freeze(context, 'console'); // provide console.log via context.log - vm.freeze(mutationsReturnValue, 'mutationsReturnValue'); // this still allows context.set to modify it - - const modifiedFunction = this.transformIndexerFunction(indexerFunction.code); - try { - await vm.run(modifiedFunction); - } catch (e) { - // NOTE: logging the exception would likely leak some information about the index runner. - // For now, we just log the message. In the future we could sanitize the stack trace - // and give the correct line number offsets within the indexer function - console.error(`${function_name}: Error running IndexerFunction on block ${block_height}: ${e.message}`); - await this.writeLog(function_name, block_height, 'Error running IndexerFunction', e.message); - throw e; - } - - if (!options.imperative) { - console.log(`Function ${function_name} returned`, mutationsReturnValue); // debug output - const writtenMutations = await this.writeMutations(function_name, functionNameWithoutAccount, mutationsReturnValue, block_height, hasuraRoleName); // await can be dropped once it's all tested so writes can happen in parallel - if(writtenMutations?.length > 0) { - allMutations.push(...writtenMutations); - } - } - - simultaneousPromises.push(this.writeFunctionState(function_name, block_height, is_historical)); - } catch (e) { - console.error(`${function_name}: Failed to run function`, e); - this.deps.awsXray.resolveSegment().addError(e); - await this.setStatus(function_name, block_height, 'STOPPED'); - throw e; - } finally { - await Promise.all(simultaneousPromises); - this.deps.awsXray.resolveSegment().close(); - } - } - return allMutations; - } - - buildKeyValueMutations(hasuraRoleName, functionNameWithoutAccount, keysValues) { - if(!keysValues || Object.keys(keysValues).length === 0) return ''; - return `mutation writeKeyValues($function_name: String!, ${Object.keys(keysValues).map((key, index) => `$key_name${index}: String!, $value${index}: String!`).join(', ')}) { - ${Object.keys(keysValues).map((key, index) => `_${index}: insert_${hasuraRoleName}_${functionNameWithoutAccount}_indexer_storage_one(object: {function_name: $function_name, key_name: $key_name${index}, value: $value${index}} on_conflict: {constraint: indexer_storage_pkey, update_columns: value}) {key_name}`).join('\n')} - }`; - } - buildKeyValueVariables(functionName, keysValues) { - if(!keysValues || Object.keys(keysValues).length === 0) return {}; - return Object.keys(keysValues).reduce((acc, key, index) => { - acc[`key_name${index}`] = key; - acc[`value${index}`] = keysValues[key] ? JSON.stringify(keysValues[key]) : null; - return acc; - }, {function_name: functionName}); - } - async writeMutations(functionName, functionNameWithoutAccount, mutationsReturnValue, block_height, hasuraRoleName) { - if(mutationsReturnValue?.mutations.length == 0 && Object.keys(mutationsReturnValue?.keysValues).length == 0) return; - try { - const keyValuesMutations = this.buildKeyValueMutations(hasuraRoleName, functionNameWithoutAccount, mutationsReturnValue.keysValues); - const allMutations = mutationsReturnValue.mutations.join('\n') + keyValuesMutations; - const variablesPlusKeyValues = {...mutationsReturnValue.variables, ...this.buildKeyValueVariables(functionName, mutationsReturnValue.keysValues)}; - - console.log('Writing mutations for function: ' + functionName, allMutations, variablesPlusKeyValues); // debug output - await this.runGraphQLQuery(allMutations, variablesPlusKeyValues, functionName, block_height, hasuraRoleName); - - return keyValuesMutations.length > 0 ? mutationsReturnValue.mutations.concat(keyValuesMutations) : mutationsReturnValue.mutations; - } catch (e) { - console.error(`${functionName}: Failed to write mutations for function`, e); - } - } - - // pad with 0s to 12 digits - normalizeBlockHeight(block_height) { - return block_height.toString().padStart(12, '0'); - } - - async fetchStreamerMessage(block_height) { - const blockPromise = this.fetchBlockPromise(block_height); - // hardcoding 4 shards to test performance - const shardsPromises = await this.fetchShardsPromises(block_height, 4); // block.chunks.length) - - const results = await Promise.all([blockPromise, ...shardsPromises]); - const block = results.shift(); - const shards = results; - return { - block: block, - shards: shards, - }; - } - - async fetchShardsPromises(block_height, number_of_shards) { - return ([...Array(number_of_shards).keys()].map((shard_id) => - this.fetchShardPromise(block_height, shard_id))); - } - - fetchShardPromise(block_height, shard_id) { - const params = { - Bucket: `near-lake-data-${this.network}`, - Key: `${this.normalizeBlockHeight(block_height)}/shard_${shard_id}.json`, - }; - return this.deps.s3.getObject(params).promise().then((response) => { - return JSON.parse(response.Body.toString(), (key, value) => this.renameUnderscoreFieldsToCamelCase(value)); - }); - } - - fetchBlockPromise(block_height) { - const file = 'block.json'; - const folder = this.normalizeBlockHeight(block_height); - const params = { - Bucket: 'near-lake-data-' + this.network, - Key: `${folder}/${file}`, - }; - return this.deps.s3.getObject(params).promise().then((response) => { - const block = JSON.parse(response.Body.toString(), (key, value) => this.renameUnderscoreFieldsToCamelCase(value)); - return block; - }); - } - - enableAwaitTransform(indexerFunction) { - return ` - async function f(){ - ${indexerFunction} - }; - f(); - `; - } - - transformIndexerFunction(indexerFunction) { - return [ - this.enableAwaitTransform, - ].reduce((acc, val) => val(acc), indexerFunction); - } - - buildFunctionalContextForFunction(mutationsReturnValue, functionName, block_height) { - return { - graphql: (mutation, variables) => { - mutationsReturnValue.mutations.push(mutation); - // todo this is now a problem because multiple mutations could use the same variable names, but for now we're going to match the imperative context signature. - mutationsReturnValue.variables = Object.assign(mutationsReturnValue.variables, variables); - }, - set: (key, value) => { - mutationsReturnValue.keysValues[key] = value; - }, - log: async (...log) => { // starting with imperative logging for both imperative and functional contexts - return await this.writeLog(functionName, block_height, ...log); - }, - }; - } - - buildImperativeContextForFunction(functionName, functionNameWithoutAccount, block_height, hasuraRoleName, is_historical) { - return { - graphql: async (operation, variables) => { - try { - console.log(`${functionName}: Running context graphql`, operation); // temporary extra logging - return await this.runGraphQLQuery(operation, variables, functionName, block_height, hasuraRoleName); - } catch (e) { - throw e; // allow catch outside of vm.run to receive the error - } - }, - set: async (key, value) => { - const mutation = - `mutation SetKeyValue($function_name: String!, $key: String!, $value: String!) { - insert_${hasuraRoleName}_${functionNameWithoutAccount}_indexer_storage_one(object: {function_name: $function_name, key_name: $key, value: $value} on_conflict: {constraint: indexer_storage_pkey, update_columns: value}) {key_name} - }` - const variables = { - function_name: functionName, - key: key, - value: value ? JSON.stringify(value) : null - }; - try { - console.log(`${functionName}: Running set:`, mutation, variables); // temporary extra logging - return await this.runGraphQLQuery(mutation, variables, functionName, block_height, hasuraRoleName); - } catch (e) { - throw e; // allow catch outside of vm.run to receive the error - } - }, - log: async (...log) => { - return await this.writeLog(functionName, block_height, ...log); - }, - putMetric: (name, value) => { - const [accountId, fnName] = functionName.split('/'); - return this.deps.metrics.putCustomMetric( - accountId, - fnName, - is_historical, - `CUSTOM_${name}`, - value - ); - }, - fetchFromSocialApi: async (path, options) => { - return this.deps.fetch(`https://api.near.social${path}`, options); - } - }; - } - - setStatus(functionName, blockHeight, status) { - const activeFunctionSubsegment = this.deps.awsXray.resolveSegment() - const subsegment = activeFunctionSubsegment.addNewSubsegment(`setStatus`); - - return this.runGraphQLQuery( - ` - mutation SetStatus($function_name: String, $status: String) { - insert_indexer_state_one(object: {function_name: $function_name, status: $status, current_block_height: 0 }, on_conflict: { constraint: indexer_state_pkey, update_columns: status }) { - function_name - status - } - } - `, - { - function_name: functionName, - status, - }, - functionName, - blockHeight, - this.DEFAULT_HASURA_ROLE - ).finally(() => { - subsegment.close(); - }); - } - - async writeLog(function_name, block_height, ...message) { // accepts multiple arguments - const activeFunctionSubsegment = this.deps.awsXray.resolveSegment(); - const subsegment = activeFunctionSubsegment.addNewSubsegment(`writeLog`); - const parsedMessage = message - .map(m => typeof m === 'object' ? JSON.stringify(m) : m) - .join(':'); - - const mutation = - `mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){ - insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {id} - }`; - - return this.runGraphQLQuery(mutation, {function_name, block_height, message: parsedMessage}, - function_name, block_height, this.DEFAULT_HASURA_ROLE) - .then((result) => { - return result?.insert_indexer_log_entries_one?.id; - }) - .catch((e) => { - console.error(`${function_name}: Error writing log`, e); - }) - .finally(() => { - subsegment.close(); - }); - } - - async writeFunctionState(function_name, block_height, is_historical) { - const activeFunctionSubsegment = this.deps.awsXray.resolveSegment(); - const subsegment = activeFunctionSubsegment.addNewSubsegment(`writeFunctionState`); - const real_time_mutation = - `mutation WriteBlock($function_name: String!, $block_height: numeric!) { - insert_indexer_state( - objects: {current_block_height: $block_height, function_name: $function_name} - on_conflict: {constraint: indexer_state_pkey, update_columns: current_block_height} - ) { - returning { - current_block_height - function_name - } - } - }`; - const historical_mutation = ` - mutation WriteBlock($function_name: String!, $block_height: numeric!) { - insert_indexer_state( - objects: {current_historical_block_height: $block_height, current_block_height: 0, function_name: $function_name} - on_conflict: {constraint: indexer_state_pkey, update_columns: current_historical_block_height} - ) { - returning { - current_block_height - current_historical_block_height - function_name - } - } - } - `; - const variables = { - function_name, - block_height, - }; - return this.runGraphQLQuery(is_historical ? historical_mutation : real_time_mutation, variables, function_name, block_height, this.DEFAULT_HASURA_ROLE) - .catch((e) => { - console.error(`${function_name}: Error writing function state`, e); - }) - .finally(() => { - subsegment.close(); - }); - } - - async runGraphQLQuery(operation, variables, function_name, block_height, hasuraRoleName, logError = true) { - const response = await this.deps.fetch(`${process.env.HASURA_ENDPOINT}/v1/graphql`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Hasura-Use-Backend-Only-Permissions': 'true', - ...(hasuraRoleName && { - 'X-Hasura-Role': hasuraRoleName, - 'X-Hasura-Admin-Secret': process.env.HASURA_ADMIN_SECRET - } - ), - }, - body: JSON.stringify({ - query: operation, - ...(variables && {variables}), - }), - }); - - const {data, errors} = await response.json(); - - if (response.status !== 200 || errors) { - if(logError) { - console.log(`${function_name}: Error writing graphql `, errors); // temporary extra logging - this.deps.awsXray.resolveSegment().addAnnotation('graphql_errors', true); - - const message = errors ? errors.map((e) => e.message).join(', ') : `HTTP ${response.status} error writing with graphql to indexer storage`; - const mutation = - `mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){ - insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) { - id - } - }`; - try { - await this.runGraphQLQuery(mutation, {function_name, block_height, message}, function_name, block_height, this.DEFAULT_HASURA_ROLE, false); - } catch (e) { - console.error(`${function_name}: Error writing log of graphql error`, e); - } - } - throw new Error(`Failed to write graphql, http status: ${response.status}, errors: ${JSON.stringify(errors, null, 2)}`); - } - - return data; - } - - renameUnderscoreFieldsToCamelCase(value) { - if (value && typeof value === "object" && !Array.isArray(value)) { - // It's a non-null, non-array object, create a replacement with the keys initially-capped - const newValue = {}; - for (const key in value) { - const newKey = key - .split("_") - .map((word, i) => { - if (i > 0) { - return word.charAt(0).toUpperCase() + word.slice(1); - } - return word; - }) - .join(""); - newValue[newKey] = value[key]; - } - return newValue; - } - return value; - } -} diff --git a/indexer-js-queue-handler/indexer.test.js b/indexer-js-queue-handler/indexer.test.js deleted file mode 100644 index 18322215e..000000000 --- a/indexer-js-queue-handler/indexer.test.js +++ /dev/null @@ -1,1039 +0,0 @@ -import { jest } from '@jest/globals'; -import { Block } from '@near-lake/primitives' - -import Indexer from './indexer'; -import {VM} from "vm2"; -import Provisioner from './provisioner'; - -const mockAwsXray = { - resolveSegment: () => ({ - addError: () => {}, - close: () => {}, - addAnnotation: () => {}, - addNewSubsegment: () => ({ - addAnnotation: () => {}, - close: () => {} - }), - }), - getSegment: () => ({ - addAnnotation: () => {}, - addNewSubsegment: () => ({ - addAnnotation: () => {}, - close: () => {} - }), - }), -}; - -const mockMetrics = { - putBlockHeight: () => {}, -}; - -describe('Indexer unit tests', () => { - const oldEnv = process.env; - - const HASURA_ENDPOINT = 'mock-hasura-endpoint'; - const HASURA_ADMIN_SECRET = 'mock-hasura-secret'; - - beforeAll(() => { - process.env = { - ...oldEnv, - HASURA_ENDPOINT, - HASURA_ADMIN_SECRET - }; - }); - - afterAll(() => { - process.env = oldEnv; - }); - - test('Indexer.runFunctions() should execute all functions against the current block', async () => { - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const block_height = 456; - const mockS3 = { - getObject: jest.fn(() => ({ - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [], - header: { - height: block_height - } - }) - } - }) - })), - }; - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = {}; - functions['buildnear.testnet/test'] = {code:` - const foo = 3; - block.result = context.graphql(\`mutation { set(functionName: "buildnear.testnet/test", key: "height", data: "\$\{block.blockHeight\}")}\`); - mutationsReturnValue['hack'] = function() {return 'bad'} - `}; - await indexer.runFunctions(block_height, functions, false); - - expect(mockFetch.mock.calls).toMatchSnapshot(); - }); - - test('Indexer.writeMutations() should POST a graphQL mutation from a mutation string', async () => { - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const indexer = new Indexer('mainnet', { fetch: mockFetch, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functionName = 'buildnear.testnet/test'; - const mutations = {mutations: [`mutation { _0: set(functionName: "${functionName}", key: "foo2", data: "indexer test") }`], variables: {}, keysValues: {}}; - await indexer.writeMutations(functionName, 'test', mutations); - - expect(mockFetch).toHaveBeenCalledTimes(1); - expect(mockFetch).toHaveBeenCalledWith( - `${HASURA_ENDPOINT}/v1/graphql`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Hasura-Use-Backend-Only-Permissions': 'true' - }, - body: JSON.stringify({ query: `mutation { _0: set(functionName: "${functionName}", key: "foo2", data: "indexer test") }`, - variables: {}}), - } - ); - }); - - test('Indexer.writeMutations() should batch multiple mutations in to a single request', async () => { - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const indexer = new Indexer('mainnet', { fetch: mockFetch, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functionName = 'buildnear.testnet/test'; - const mutations = {mutations: [ - `mutation _0 { set(functionName: "${functionName}", key: "foo1", data: "indexer test") }`, - `mutation _1 { set(functionName: "${functionName}", key: "foo2", data: "indexer test") }` - ], variables: {}, keysValues: {}}; - await indexer.writeMutations(functionName, 'test', mutations); - - expect(mockFetch).toHaveBeenCalledTimes(1); - expect(mockFetch).toHaveBeenCalledWith( - `${HASURA_ENDPOINT}/v1/graphql`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Hasura-Use-Backend-Only-Permissions': 'true' - }, - body: JSON.stringify({ query: - `mutation _0 { set(functionName: "buildnear.testnet/test", key: "foo1", data: "indexer test") } -mutation _1 { set(functionName: "buildnear.testnet/test", key: "foo2", data: "indexer test") }`, - variables: {}}), - } - ); - }); - - test('Indexer.fetchBlock() should fetch a block from the S3', async () => { - const author = 'dokiacapital.poolv1.near'; - const mockS3 = { - getObject: jest.fn(() => ({ - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - author - }) - } - }) - })), - }; - const indexer = new Indexer('mainnet', { s3: mockS3, awsXray: mockAwsXray, metrics: mockMetrics }); - - const blockHeight = '84333960'; - const block = await indexer.fetchBlockPromise(blockHeight); - - expect(mockS3.getObject).toHaveBeenCalledTimes(1); - expect(mockS3.getObject).toHaveBeenCalledWith({ - Bucket: 'near-lake-data-mainnet', - Key: `${blockHeight.padStart(12, '0')}/block.json` - }); - expect(block.author).toEqual(author); - }); - - test('Indexer.fetchShard() should fetch the steamer message from S3', async () => { - const mockS3 = { - getObject: jest.fn(() => ({ - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({}) - } - }) - })), - }; - const indexer = new Indexer('mainnet', { s3: mockS3, awsXray: mockAwsXray, metrics: mockMetrics }); - - const blockHeight = 82699904; - const shard = 0; - await indexer.fetchShardPromise(blockHeight, shard); - - expect(mockS3.getObject).toHaveBeenCalledTimes(1); - expect(mockS3.getObject).toHaveBeenCalledWith({ - Bucket: 'near-lake-data-mainnet', - Key: `${blockHeight.toString().padStart(12, '0')}/shard_${shard}.json` - }); - }); - - test('Indexer.fetchStreamerMessage() should fetch the block/shards and construct the streamer message', async () => { - const blockHeight = 85233529; - const blockHash = 'xyz'; - const getObject = jest.fn() - .mockReturnValueOnce({ // block - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [0], - header: { - height: blockHeight, - hash: blockHash, - } - }) - } - }) - }) - .mockReturnValue({ // shard - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({}) - } - }) - }) - const mockS3 = { - getObject, - }; - const indexer = new Indexer('mainnet', { s3: mockS3, awsXray: mockAwsXray, metrics: mockMetrics }); - - const shard = 0; - const streamerMessage = await indexer.fetchStreamerMessage(blockHeight); - - expect(getObject).toHaveBeenCalledTimes(5); - expect(getObject.mock.calls[0][0]).toEqual({ - Bucket: 'near-lake-data-mainnet', - Key: `${blockHeight.toString().padStart(12, '0')}/block.json` - }); - expect(getObject.mock.calls[1][0]).toEqual({ - Bucket: 'near-lake-data-mainnet', - Key: `${blockHeight.toString().padStart(12, '0')}/shard_0.json` - }); - - const block = Block.fromStreamerMessage(streamerMessage); - - expect(block.blockHeight).toEqual(blockHeight); - expect(block.blockHash).toEqual(blockHash); - }); - - test('Indexer.transformIndexerFunction() applies the necessary transformations', () => { - const indexer = new Indexer('mainnet', { awsXray: mockAwsXray, metrics: mockMetrics }) - - const transformedFunction = indexer.transformIndexerFunction(`console.log('hello')`); - - expect(transformedFunction).toEqual(` - async function f(){ - console.log('hello') - }; - f(); - `); - }); - - test('Indexer.buildImperativeContextForFunction() allows execution of arbitrary GraphQL operations', async () => { - const mockFetch = jest.fn() - .mockResolvedValueOnce({ - status: 200, - json: async () => ({ - data: { - greet: 'hello' - } - }) - }) - .mockResolvedValueOnce({ - status: 200, - json: async () => ({ - data: { - newGreeting: { - success: true - } - } - }) - }); - const indexer = new Indexer('mainnet', { fetch: mockFetch, awsXray: mockAwsXray, metrics: mockMetrics }); - - const context = indexer.buildImperativeContextForFunction(); - - const query = ` - query { - greet() - } - `; - const { greet } = await context.graphql(query); - - const mutation = ` - mutation { - newGreeting(greeting: "${greet} morgan") { - success - } - } - `; - const { newGreeting: { success } } = await context.graphql(mutation); - - expect(greet).toEqual('hello'); - expect(success).toEqual(true); - expect(mockFetch.mock.calls[0]).toEqual([ - `${HASURA_ENDPOINT}/v1/graphql`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Hasura-Use-Backend-Only-Permissions': 'true', - }, - body: JSON.stringify({ query: query }) - } - ]); - expect(mockFetch.mock.calls[1]).toEqual([ - `${HASURA_ENDPOINT}/v1/graphql`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Hasura-Use-Backend-Only-Permissions': 'true', - }, - body: JSON.stringify({ query: mutation }) - } - ]); - }); - - test('Indexer.buildImperativeContextForFunction() can fetch from the near social api', async () => { - const mockFetch = jest.fn(); - const indexer = new Indexer('mainnet', { fetch: mockFetch, awsXray: mockAwsXray, metrics: mockMetrics }); - - const context = indexer.buildImperativeContextForFunction(); - - await context.fetchFromSocialApi('/index', { - method: 'POST', - headers: { - ['Content-Type']: 'application/json', - }, - body: JSON.stringify({ - action: 'post', - key: 'main', - options: { - limit: 1, - order: 'desc' - } - }) - }); - - expect(mockFetch.mock.calls).toMatchSnapshot(); - }); - - test('Indexer.buildImperativeContextForFunction() throws when a GraphQL response contains errors', async () => { - const mockFetch = jest.fn() - .mockResolvedValue({ - json: async () => ({ - errors: ['boom'] - }) - }); - const indexer = new Indexer('mainnet', { fetch: mockFetch, awsXray: mockAwsXray, metrics: mockMetrics }); - - const context = indexer.buildImperativeContextForFunction(); - - expect(() => context.graphql(`query { hello }`)).rejects.toThrow('boom'); - }); - - test('Indexer.buildImperativeContextForFunction() handles GraphQL variables', async () => { - const mockFetch = jest.fn() - .mockResolvedValue({ - status: 200, - json: async () => ({ - data: 'mock', - }), - }); - const indexer = new Indexer('mainnet', { fetch: mockFetch, awsXray: mockAwsXray, metrics: mockMetrics }); - - const context = indexer.buildImperativeContextForFunction(); - - const query = `query($name: String) { hello(name: $name) }`; - const variables = { name: 'morgan' }; - await context.graphql(query, variables); - - expect(mockFetch.mock.calls[0]).toEqual([ - `${HASURA_ENDPOINT}/v1/graphql`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Hasura-Use-Backend-Only-Permissions': 'true', - }, - body: JSON.stringify({ - query, - variables, - }), - }, - ]); - }) - - test('Indexer.runFunctions() allows imperative execution of GraphQL operations', async () => { - const postId = 1; - const commentId = 2; - const blockHeight = 82699904; - const mockFetch = jest.fn() - .mockReturnValueOnce({ // starting log - status: 200, - json: async () => ({ - data: { - indexer_log_store: [ - { - id: '12345', - }, - ], - }, - }), - }) - .mockReturnValueOnce({ - status: 200, - json: async () => ({ - errors: null, - }), - }) - .mockReturnValueOnce({ // query - status: 200, - json: async () => ({ - data: { - posts: [ - { - id: postId, - }, - ], - }, - }), - }) - .mockReturnValueOnce({ // mutation - status: 200, - json: async () => ({ - data: { - insert_comments: { - returning: { - id: commentId, - }, - }, - }, - }), - }) - .mockReturnValueOnce({ - status: 200, - json: async () => ({ - errors: null, - }), - }); - - const mockS3 = { - getObject: jest.fn() - .mockReturnValueOnce({ // block - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [0], - header: { - height: blockHeight, - }, - }), - }, - }), - }) - .mockReturnValue({ // shard - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({}) - }, - }), - }), - }; - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = {}; - functions['buildnear.testnet/test'] = {code:` - const { posts } = await context.graphql(\` - query { - posts(where: { id: { _eq: 1 } }) { - id - } - } - \`); - - if (!posts || posts.length === 0) { - return; - } - - const [post] = posts; - - const { insert_comments: { returning: { id } } } = await context.graphql(\` - mutation { - insert_comments( - objects: {account_id: "morgs.near", block_height: \${block.blockHeight}, content: "cool post", post_id: \${post.id}} - ) { - returning { - id - } - } - } - \`); - - return (\`Created comment \${id} on post \${post.id}\`) - `}; - - await indexer.runFunctions(blockHeight, functions, false, { imperative: true }); - - expect(mockFetch.mock.calls).toMatchSnapshot(); - }); - - test('Indexer.runFunctions() console.logs', async () => { - const logs = [] - const context = {log: (...m) => { - logs.push(...m) - }}; - const vm = new VM(); - vm.freeze(context, 'context'); - vm.freeze(context, 'console'); - await vm.run('console.log("hello", "brave new"); context.log("world")'); - expect(logs).toEqual(['hello','brave new','world']); - }); - - test("Errors thrown in VM can be caught outside the VM", async () => { - const vm = new VM(); - const t = () => { - vm.run("throw new Error('boom')") - } - await expect(t).toThrow('boom'); - }); - - test('Indexer.runFunctions() catches errors', async () => { - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const block_height = 456; - const mockS3 = { - getObject: jest.fn(() => ({ - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [], - header: { - height: block_height - } - }) - } - }) - })), - }; - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = {}; - functions['buildnear.testnet/test'] = {code:` - throw new Error('boom'); - `}; - - await expect(indexer.runFunctions(block_height, functions, false, {imperative: true })).rejects.toThrow(new Error('boom')) - expect(mockFetch.mock.calls).toMatchSnapshot(); - }); - - test('Indexer.runFunctions() provisions a GraphQL endpoint with the specified schema', async () => { - const postId = 1; - const commentId = 2; - const blockHeight = 82699904; - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const mockS3 = { - getObject: jest - .fn() - .mockReturnValueOnce({ // block - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [0], - header: { - height: blockHeight, - }, - }), - }, - }), - }) - .mockReturnValue({ // shard - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({}) - }, - }), - }), - }; - const provisioner = { - isUserApiProvisioned: jest.fn().mockReturnValue(false), - provisionUserApi: jest.fn(), - } - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, provisioner, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = { - 'morgs.near/test': { - account_id: 'morgs.near', - function_name: 'test', - code: '', - schema: 'schema', - } - }; - await indexer.runFunctions(1, functions, false, { provision: true }); - - expect(provisioner.isUserApiProvisioned).toHaveBeenCalledWith('morgs.near', 'test'); - expect(provisioner.provisionUserApi).toHaveBeenCalledTimes(1); - expect(provisioner.provisionUserApi).toHaveBeenCalledWith( - 'morgs.near', - 'test', - 'schema' - ) - }); - - test('Indexer.runFunctions() skips provisioning if the endpoint exists', async () => { - const postId = 1; - const commentId = 2; - const blockHeight = 82699904; - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const mockS3 = { - getObject: jest - .fn() - .mockReturnValueOnce({ // block - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [0], - header: { - height: blockHeight, - }, - }), - }, - }), - }) - .mockReturnValue({ // shard - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({}) - }, - }), - }), - }; - const provisioner = { - isUserApiProvisioned: jest.fn().mockReturnValue(true), - provisionUserApi: jest.fn(), - } - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, provisioner, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = { - 'morgs.near/test': { - code: '', - schema: 'schema', - } - }; - await indexer.runFunctions(1, functions, false, { provision: true }); - - expect(provisioner.provisionUserApi).not.toHaveBeenCalled(); - }); - - test('Indexer.runFunctions() supplies the required role to the GraphQL endpoint', async () => { - const postId = 1; - const commentId = 2; - const blockHeight = 82699904; - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const mockS3 = { - getObject: jest - .fn() - .mockReturnValueOnce({ // block - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [0], - header: { - height: blockHeight, - }, - }), - }, - }), - }) - .mockReturnValue({ // shard - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({}) - }, - }), - }), - }; - const provisioner = { - isUserApiProvisioned: jest.fn().mockReturnValue(true), - provisionUserApi: jest.fn(), - } - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, provisioner, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = { - 'morgs.near/test': { - code: ` - context.graphql(\`mutation { set(functionName: "buildnear.testnet/test", key: "height", data: "\$\{block.blockHeight\}")}\`); - `, - schema: 'schema', - } - }; - await indexer.runFunctions(blockHeight, functions, false, { provision: true }); - - expect(provisioner.provisionUserApi).not.toHaveBeenCalled(); - expect(mockFetch.mock.calls).toMatchSnapshot(); - }); - - test('Indexer.runFunctions() logs provisioning failures', async () => { - const postId = 1; - const commentId = 2; - const blockHeight = 82699904; - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const mockS3 = { - getObject: jest - .fn() - .mockReturnValueOnce({ // block - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [0], - header: { - height: blockHeight, - }, - }), - }, - }), - }) - .mockReturnValue({ // shard - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({}) - }, - }), - }), - }; - const error = new Error('something went wrong with provisioning'); - const provisioner = { - isUserApiProvisioned: jest.fn().mockReturnValue(false), - provisionUserApi: jest.fn().mockRejectedValue(error), - } - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, provisioner, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = { - 'morgs.near/test': { - code: ` - context.graphql(\`mutation { set(functionName: "buildnear.testnet/test", key: "height", data: "\$\{block.blockHeight\}")}\`); - `, - schema: 'schema', - } - }; - - await expect(indexer.runFunctions(blockHeight, functions, false, { provision: true })).rejects.toThrow(error) - expect(mockFetch.mock.calls).toMatchSnapshot(); - }); - - test('Indexer.runFunctions() sets the current historical block height', async () => { - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const block_height = 456; - const mockS3 = { - getObject: jest.fn(() => ({ - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [], - header: { - height: block_height - } - }) - } - }) - })), - }; - const metrics = { - putBlockHeight: jest.fn().mockReturnValueOnce({ promise: jest.fn() }), - }; - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, awsXray: mockAwsXray, metrics }); - - const functions = {}; - functions['buildnear.testnet/test'] = { - code:` - console.log('hey') - `, - account_id: 'buildnear.testnet', - function_name: 'test' - }; - await indexer.runFunctions(block_height, functions, true); - - expect(mockFetch.mock.calls).toMatchSnapshot(); - }); - - test('Indexer.runFunctions() publishes the current block height', async () => { - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const block_height = 456; - const mockS3 = { - getObject: jest.fn(() => ({ - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [], - header: { - height: block_height - } - }) - } - }) - })), - }; - const metrics = { - putBlockHeight: jest.fn().mockReturnValueOnce({ promise: jest.fn() }), - }; - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, awsXray: mockAwsXray, metrics }); - - const functions = {}; - functions['buildnear.testnet/test'] = { - code:` - const foo = 3; - block.result = context.graphql(\`mutation { set(functionName: "buildnear.testnet/test", key: "height", data: "\$\{block.blockHeight\}")}\`); - mutationsReturnValue['hack'] = function() {return 'bad'} - `, - account_id: 'buildnear.testnet', - function_name: 'test' - }; - await indexer.runFunctions(block_height, functions, false); - - expect(metrics.putBlockHeight).toHaveBeenCalledWith('buildnear.testnet', 'test', false, block_height); - }); - - test('does not attach the hasura admin secret header when no role specified', async () => { - const mockFetch = jest.fn() - .mockResolvedValueOnce({ - status: 200, - json: async () => ({ - data: {} - }) - }); - const indexer = new Indexer('mainnet', { fetch: mockFetch, awsXray: mockAwsXray, metrics: mockMetrics }); - const context = indexer.buildImperativeContextForFunction(); - - const mutation = ` - mutation { - newGreeting(greeting: "howdy") { - success - } - } - `; - - await context.graphql(mutation); - - expect(mockFetch.mock.calls[0]).toEqual([ - `${HASURA_ENDPOINT}/v1/graphql`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Hasura-Use-Backend-Only-Permissions': 'true', - }, - body: JSON.stringify({ query: mutation }) - } - ]); - }); - - test('attaches the backend only header to requests to hasura', async () => { - const mockFetch = jest.fn() - .mockResolvedValueOnce({ - status: 200, - json: async () => ({ - data: {} - }) - }); - const role = 'morgs_near'; - const indexer = new Indexer('mainnet', { fetch: mockFetch, awsXray: mockAwsXray, metrics: mockMetrics }); - const context = indexer.buildImperativeContextForFunction(null, null, null, role); - - const mutation = ` - mutation { - newGreeting(greeting: "howdy") { - success - } - } - `; - - await context.graphql(mutation); - - expect(mockFetch.mock.calls[0]).toEqual([ - `${HASURA_ENDPOINT}/v1/graphql`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Hasura-Use-Backend-Only-Permissions': 'true', - 'X-Hasura-Role': role, - 'X-Hasura-Admin-Secret': HASURA_ADMIN_SECRET - }, - body: JSON.stringify({ query: mutation }) - } - ]); - }); - - test('allows writing of custom metrics', async () => { - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const block_height = 456; - const mockS3 = { - getObject: jest.fn(() => ({ - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [], - header: { - height: block_height - } - }) - } - }) - })), - }; - const metrics = { - putBlockHeight: () => {}, - putCustomMetric: jest.fn(), - }; - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, awsXray: mockAwsXray, metrics }); - - const functions = {}; - functions['buildnear.testnet/test'] = {code:` - context.putMetric('TEST_METRIC', 1) - `}; - await indexer.runFunctions(block_height, functions, true, { imperative: true }); - - expect(metrics.putCustomMetric).toHaveBeenCalledWith( - 'buildnear.testnet', - 'test', - true, - 'CUSTOM_TEST_METRIC', - 1 - ); - }); - - // The unhandled promise causes problems with test reporting. - // Note unhandled promise rejections fail to proceed to the next function on AWS Lambda - test.skip('Indexer.runFunctions() continues despite promise rejection, unable to log rejection', async () => { - const mockFetch = jest.fn(() => ({ - status: 200, - json: async () => ({ - errors: null, - }), - })); - const block_height = 456; - const mockS3 = { - getObject: jest.fn(() => ({ - promise: () => Promise.resolve({ - Body: { - toString: () => JSON.stringify({ - chunks: [], - header: { - height: block_height - } - }) - } - }) - })), - }; - const indexer = new Indexer('mainnet', { fetch: mockFetch, s3: mockS3, awsXray: mockAwsXray, metrics: mockMetrics }); - - const functions = {}; - functions['buildnear.testnet/fails'] = {code:` - Promise.reject('rejected'); - `}; - functions['buildnear.testnet/succeeds'] = {code:` - console.log('succeeded'); - `}; - await indexer.runFunctions(block_height, functions, false, {imperative: true}); - - // console.log('"Indexer.runFunctions() catches errors" calls:', mockFetch.mock.calls); - expect(mockFetch).toHaveBeenCalledTimes(5); // 2 logs, 1 state - // expect(mockFetch.mock.calls[1]).toEqual([ - // GRAPHQL_ENDPOINT, - // { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json', - // }, - // body: JSON.stringify({ - // query: `mutation writeLog($function_name: String!, $block_height: numeric!, $message: String!){\n insert_indexer_log_entries_one(object: {function_name: $function_name, block_height: $block_height, message: $message}) {\n id\n }\n}\n`, - // variables: {"function_name":"buildnear.testnet/test","block_height":456,"message":"[\"Error running IndexerFunction\",\"rejected\"]"} - // }), - // } - // ]); - expect(mockFetch.mock.calls[1]).toEqual([ - GRAPHQL_ENDPOINT, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({query:`mutation WriteBlock($function_name: String!, $block_height: numeric!) { - insert_indexer_state( - objects: {current_block_height: $block_height, function_name: $function_name} - on_conflict: {constraint: indexer_state_pkey, update_columns: current_block_height} - ) { - returning { - current_block_height - function_name - } - } - }`,variables:{function_name:"buildnear.testnet/fails",block_height:456}}), - } - ]); - }); -}); diff --git a/indexer-js-queue-handler/jest.config.js b/indexer-js-queue-handler/jest.config.js deleted file mode 100644 index e73cbb412..000000000 --- a/indexer-js-queue-handler/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - testPathIgnorePatterns: [ - './handler.test.js', - './indexer.integration.test.js' - ], -}; diff --git a/indexer-js-queue-handler/metrics.js b/indexer-js-queue-handler/metrics.js deleted file mode 100644 index cd7a653ac..000000000 --- a/indexer-js-queue-handler/metrics.js +++ /dev/null @@ -1,46 +0,0 @@ -import AWS from "aws-sdk"; - -export default class Metrics { - constructor(namespace, cloudwatch) { - this.cloudwatch = - cloudwatch || new AWS.CloudWatch({ region: process.env.REGION }); - this.namespace = namespace; - } - - putBlockHeight(accountId, functionName, isHistorical, height) { - return this.putCustomMetric(accountId, functionName, isHistorical, "INDEXER_FUNCTION_LATEST_BLOCK_HEIGHT", height); - } - - putCustomMetric(accountId, functionName, isHistorical, metricName, value) { - return this.cloudwatch - .putMetricData({ - MetricData: [ - { - MetricName: metricName, - Dimensions: [ - { - Name: "ACCOUNT_ID", - Value: accountId, - }, - { - Name: "FUNCTION_NAME", - Value: functionName, - }, - { - Name: "STAGE", - Value: process.env.STAGE, - }, - { - Name: "EXECUTION_TYPE", - Value: isHistorical ? "historical" : "real-time", - }, - ], - Unit: "None", - Value: value, - }, - ], - Namespace: this.namespace, - }) - .promise(); - } -} diff --git a/indexer-js-queue-handler/metrics.test.js b/indexer-js-queue-handler/metrics.test.js deleted file mode 100644 index fc9b74aaf..000000000 --- a/indexer-js-queue-handler/metrics.test.js +++ /dev/null @@ -1,30 +0,0 @@ -import { jest } from '@jest/globals'; - -import Metrics from './metrics'; - -describe('Metrics', () => { - const oldEnv = process.env; - - beforeAll(() => { - process.env = { - ...oldEnv, - STAGE: 'dev', - }; - }); - - afterAll(() => { - process.env = oldEnv; - }); - - it('writes the block height for an indexer function', async () => { - const cloudwatch = { - putMetricData: jest.fn().mockReturnValueOnce({ promise: jest.fn() }) - }; - const metrics = new Metrics('test', cloudwatch); - - await metrics.putBlockHeight('morgs.near', 'test', false, 2); - - expect(cloudwatch.putMetricData).toBeCalledTimes(1); - expect(cloudwatch.putMetricData.mock.calls[0]).toMatchSnapshot() - }); -}) diff --git a/indexer-js-queue-handler/package-lock.json b/indexer-js-queue-handler/package-lock.json deleted file mode 100644 index b055f6e01..000000000 --- a/indexer-js-queue-handler/package-lock.json +++ /dev/null @@ -1,14142 +0,0 @@ -{ - "name": "queryapi", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "queryapi", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@near-lake/primitives": "^0.1.0", - "aws-sdk": "^2.1369.0", - "aws-xray-sdk": "^3.5.0", - "near-api-js": "1.1.0", - "node-fetch": "^3.3.0", - "pg": "^8.11.1", - "pg-format": "^1.0.4", - "pluralize": "^8.0.0", - "verror": "^1.10.1", - "vm2": "^3.9.13" - }, - "devDependencies": { - "jest": "^29.4.1", - "serverless-lift": "^1.1.2" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.52", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@aws-cdk/asset-kubectl-v20": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@aws-cdk/asset-node-proxy-agent-v5": { - "version": "2.0.42", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@aws-cdk/aws-apigatewayv2-alpha": { - "version": "2.21.1-alpha.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "aws-cdk-lib": "^2.21.1", - "constructs": "^10.0.0" - } - }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz", - "integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz", - "integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.20.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.13", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.20.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.4.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.4.1", - "@jest/reporters": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@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.4.0", - "jest-config": "^29.4.1", - "jest-haste-map": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-resolve-dependencies": "^29.4.1", - "jest-runner": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "jest-watcher": "^29.4.1", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.1", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "jest-mock": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.4.1", - "jest-snapshot": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.2.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.4.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.4.1", - "@jest/expect": "^29.4.1", - "@jest/types": "^29.4.1", - "jest-mock": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@jridgewell/trace-mapping": "^0.3.15", - "@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": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.4.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.4.1", - "@jridgewell/trace-mapping": "^0.3.15", - "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.4.1", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.4.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.4.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@near-lake/primitives": { - "version": "0.1.0", - "license": "(MIT OR Apache-2.0)" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@serverless/dashboard-plugin": { - "version": "6.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@serverless/event-mocks": "^1.1.1", - "@serverless/platform-client": "^4.3.2", - "@serverless/utils": "^6.8.2", - "child-process-ext": "^2.1.1", - "chokidar": "^3.5.3", - "flat": "^5.0.2", - "fs-extra": "^9.1.0", - "js-yaml": "^4.1.0", - "jszip": "^3.10.1", - "lodash": "^4.17.21", - "memoizee": "^0.4.15", - "ncjsm": "^4.3.2", - "node-dir": "^0.1.17", - "node-fetch": "^2.6.8", - "open": "^7.4.2", - "semver": "^7.3.8", - "simple-git": "^3.16.0", - "type": "^2.7.2", - "uuid": "^8.3.2", - "yamljs": "^0.3.0" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/@serverless/dashboard-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@serverless/dashboard-plugin/node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@serverless/dashboard-plugin/node_modules/open": { - "version": "7.4.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@serverless/dashboard-plugin/node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@serverless/event-mocks": { - "version": "1.1.1", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@types/lodash": "^4.14.123", - "lodash": "^4.17.11" - } - }, - "node_modules/@serverless/platform-client": { - "version": "4.3.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "adm-zip": "^0.5.5", - "archiver": "^5.3.0", - "axios": "^0.21.1", - "fast-glob": "^3.2.7", - "https-proxy-agent": "^5.0.0", - "ignore": "^5.1.8", - "isomorphic-ws": "^4.0.1", - "js-yaml": "^3.14.1", - "jwt-decode": "^2.2.0", - "minimatch": "^3.0.4", - "querystring": "^0.2.1", - "run-parallel-limit": "^1.1.0", - "throat": "^5.0.0", - "traverse": "^0.6.6", - "ws": "^7.5.3" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@serverless/platform-client/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@serverless/platform-client/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@serverless/utils": { - "version": "6.8.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "archive-type": "^4.0.0", - "chalk": "^4.1.2", - "ci-info": "^3.5.0", - "cli-progress-footer": "^2.3.2", - "content-disposition": "^0.5.4", - "d": "^1.0.1", - "decompress": "^4.2.1", - "event-emitter": "^0.3.5", - "ext": "^1.7.0", - "ext-name": "^5.0.0", - "file-type": "^16.5.4", - "filenamify": "^4.3.0", - "get-stream": "^6.0.1", - "got": "^11.8.5", - "inquirer": "^8.2.5", - "js-yaml": "^4.1.0", - "jwt-decode": "^3.1.2", - "lodash": "^4.17.21", - "log": "^6.3.1", - "log-node": "^8.0.3", - "make-dir": "^3.1.0", - "memoizee": "^0.4.15", - "ncjsm": "^4.3.1", - "node-fetch": "^2.6.7", - "open": "^8.4.0", - "p-event": "^4.2.0", - "supports-color": "^8.1.1", - "timers-ext": "^0.1.7", - "type": "^2.7.2", - "uni-global": "^1.0.0", - "uuid": "^8.3.2", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/@serverless/utils/node_modules/jwt-decode": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@serverless/utils/node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@serverless/utils/node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.21", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "2.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^2.0.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/cls-hooked": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.3.tgz", - "integrity": "sha512-gNstDTb/ty5h6gJd6YpSPgsLX9LmRpaKJqGFp7MRlYxhwp4vXXKlJ9+bt1TZ9KbVNXE+Mbxy2AYXcpY21DDtJw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.191", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "node_modules/@types/mysql": { - "version": "2.15.21", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.21.tgz", - "integrity": "sha512-NPotx5CVful7yB+qZbWtXL2fA4e7aEHkihHLjklc6ID8aq7bhguHgeIoC1EmSNTAuCgI6ZXrjt2ZSaXnYX0EUg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "18.11.18", - "license": "MIT" - }, - "node_modules/@types/pg": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.6.tgz", - "integrity": "sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==", - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.22", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/2-thenable": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.47" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/archive-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "file-type": "^4.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/archive-type/node_modules/file-type": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/archiver": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.3", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0", - "peer": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/async-hook-jl": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", - "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", - "dependencies": { - "stack-chain": "^1.3.7" - }, - "engines": { - "node": "^4.7 || >=6.9 || >=7.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atomic-batcher": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", - "integrity": "sha512-EFGCRj4kLX1dHv1cDzTk+xbjBFj1GnJDpui52YmEcxxHHEWjYyT6l51U7n6WQ28osZH4S9gSybxe56Vm7vB61Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-cdk-lib": { - "version": "2.63.0", - "bundleDependencies": [ - "@balena/dockerignore", - "case", - "fs-extra", - "ignore", - "jsonschema", - "minimatch", - "punycode", - "semver", - "yaml" - ], - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.52", - "@aws-cdk/asset-kubectl-v20": "^2.1.1", - "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.42", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^9.1.0", - "ignore": "^5.2.4", - "jsonschema": "^1.4.1", - "minimatch": "^3.1.2", - "punycode": "^2.3.0", - "semver": "^7.3.8", - "yaml": "1.10.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "constructs": "^10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/aws-cdk-lib/node_modules/at-least-node": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/aws-cdk-lib/node_modules/case": { - "version": "1.6.3", - "dev": true, - "inBundle": true, - "license": "(MIT OR GPL-3.0-or-later)", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aws-cdk-lib/node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/aws-cdk-lib/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/aws-cdk-lib/node_modules/jsonschema": { - "version": "1.4.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/aws-cdk-lib/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aws-cdk-lib/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/aws-cdk-lib/node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.3.8", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aws-cdk-lib/node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/aws-cdk-lib/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/aws-sdk": { - "version": "2.1369.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1369.0.tgz", - "integrity": "sha512-DdCQjlhQDi9w8J4moqECrrp9ARWCay0UI38adPSS0GG43gh3bl3OoMlgKJ8aZxi4jUvzE48K9yhFHz4y/mazZw==", - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-sdk/node_modules/querystring": { - "version": "0.2.0", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "8.0.0", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/aws-xray-sdk": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-3.5.0.tgz", - "integrity": "sha512-u9iKR9QAafeoCVk4J1PH6/NbNc/dNsF5T9CoNAST7bMLnGwT9YN4l+N9zxLbuspWv8cdBPoz8dDfbyZNDHgYQQ==", - "dependencies": { - "aws-xray-sdk-core": "3.5.0", - "aws-xray-sdk-express": "3.5.0", - "aws-xray-sdk-mysql": "3.5.0", - "aws-xray-sdk-postgres": "3.5.0" - }, - "engines": { - "node": ">= 14.x" - } - }, - "node_modules/aws-xray-sdk-core": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-3.5.0.tgz", - "integrity": "sha512-T3mL9mGwnfGyZrf7RsZp702+prTCEMzX7zrqD7flwMZeb6ymXlSgREmeXys80r/9CHFgq/+JR+IclM+hep0yRw==", - "dependencies": { - "@aws-sdk/service-error-classification": "^3.4.1", - "@aws-sdk/types": "^3.4.1", - "@types/cls-hooked": "^4.3.3", - "atomic-batcher": "^1.0.2", - "cls-hooked": "^4.2.2", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.x" - } - }, - "node_modules/aws-xray-sdk-express": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-3.5.0.tgz", - "integrity": "sha512-nbdghqiHPUe7P04guh/fkBmHCsbY5pwQrDFJAqYimNK3EsB+pq2/FW7m9vodPmHSbqeTgwO/oQUiCnEQ9luf5A==", - "dependencies": { - "@types/express": "*" - }, - "engines": { - "node": ">= 14.x" - }, - "peerDependencies": { - "aws-xray-sdk-core": "^3.5.0" - } - }, - "node_modules/aws-xray-sdk-mysql": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-3.5.0.tgz", - "integrity": "sha512-vAEfSPMQq48Fg3H45voljAJT8KX79tLEzW1qz6Kb9Gqv11wihu05074L/DArQnvHnG0DaCPttZD7/nOGFc6sYA==", - "dependencies": { - "@types/mysql": "*" - }, - "engines": { - "node": ">= 14.x" - }, - "peerDependencies": { - "aws-xray-sdk-core": "^3.5.0" - } - }, - "node_modules/aws-xray-sdk-postgres": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-3.5.0.tgz", - "integrity": "sha512-3LadT1yuZYLS9RlqdgDQt5z3vojevrggnuGofT2EqsS5EQBVz7NNLYrJdTJsd4TYVVsToNxDBQI5peb2HC8TRw==", - "dependencies": { - "@types/pg": "*" - }, - "engines": { - "node": ">= 14.x" - }, - "peerDependencies": { - "aws-xray-sdk-core": "^3.5.0" - } - }, - "node_modules/axios": { - "version": "0.21.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-jest": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.4.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.4.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base-x": { - "version": "3.0.9", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bignumber.js": { - "version": "7.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "license": "MIT" - }, - "node_modules/borsh": { - "version": "0.7.0", - "license": "Apache-2.0", - "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cachedir": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001450", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/capability": { - "version": "0.2.5", - "license": "MIT" - }, - "node_modules/capital-case": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/change-case": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/child-process-ext": { - "version": "2.1.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "cross-spawn": "^6.0.5", - "es5-ext": "^0.10.53", - "log": "^6.0.0", - "split2": "^3.1.1", - "stream-promise": "^3.2.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cidr-split": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bignumber.js": "7.2.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-color": { - "version": "2.0.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-progress-footer": { - "version": "2.3.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "cli-color": "^2.0.2", - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "mute-stream": "0.0.8", - "process-utils": "^4.0.0", - "timers-ext": "^0.1.7", - "type": "^2.6.0" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/cli-spinners": { - "version": "2.7.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-sprintf-format": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "cli-color": "^2.0.1", - "es5-ext": "^0.10.53", - "sprintf-kit": "^2.0.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cli-sprintf-format/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-sprintf-format/node_modules/supports-color": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cls-hooked": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", - "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", - "dependencies": { - "async-hook-jl": "^1.7.6", - "emitter-listener": "^1.0.1", - "semver": "^5.4.1" - }, - "engines": { - "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1" - } - }, - "node_modules/cls-hooked/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/compress-commons": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/constant-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "node_modules/constructs": { - "version": "10.1.236", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 14.17.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/crc-32": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/d": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/d/node_modules/type": { - "version": "1.2.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/dayjs": { - "version": "1.11.7", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-tar": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar/node_modules/bl": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/decompress-tar/node_modules/file-type": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/decompress-tar/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/decompress-tar/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/decompress-tar/node_modules/tar-stream": { - "version": "1.6.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz/node_modules/file-type": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/get-stream": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress/node_modules/make-dir": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress/node_modules/make-dir/node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/deferred": { - "version": "0.7.11", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.50", - "event-emitter": "^0.3.5", - "next-tick": "^1.0.0", - "timers-ext": "^0.1.7" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff-sequences": { - "version": "29.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "16.0.3", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/dotenv-expand": { - "version": "9.0.0", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/duration": { - "version": "0.2.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.46" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "dev": true, - "license": "ISC" - }, - "node_modules/emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "dependencies": { - "shimmer": "^1.2.0" - } - }, - "node_modules/emittery": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-polyfill": { - "version": "0.1.3", - "license": "MIT", - "dependencies": { - "capability": "^0.2.5", - "o3": "^1.0.3", - "u3": "^0.1.1" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "dev": true, - "hasInstallScript": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-set": { - "version": "0.1.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esniff": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.12" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/essentials": { - "version": "1.2.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "uni-global": "^1.0.0" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/events": { - "version": "1.1.1", - "license": "MIT", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/execa/node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext-list": { - "version": "2.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mime-db": "^1.28.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-name": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-type": { - "version": "16.5.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.2.4", - "token-types": "^4.1.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/filenamify": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/filesize": { - "version": "10.0.6", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">= 10.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-requires": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es5-ext": "^0.10.49", - "esniff": "^1.1.0" - }, - "bin": { - "find-requires": "bin/find-requires.js" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/formidable": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fs2": { - "version": "0.3.9", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "deferred": "^0.7.11", - "es5-ext": "^0.10.53", - "event-emitter": "^0.3.5", - "ignore": "^5.1.8", - "memoizee": "^0.4.14", - "type": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "11.8.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "license": "ISC" - }, - "node_modules/graphlib": { - "version": "2.1.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/header-case": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/http-errors": { - "version": "1.8.1", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/import-local": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "8.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.4.1", - "@jest/types": "^29.4.1", - "import-local": "^3.0.2", - "jest-cli": "^29.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.4.1", - "@jest/expect": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.1", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "p-limit": "^3.1.0", - "pretty-format": "^29.4.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.1", - "@jest/types": "^29.4.1", - "babel-jest": "^29.4.1", - "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.4.1", - "jest-environment-node": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-runner": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.4.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.4.1", - "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", - "jest-util": "^29.4.1", - "pretty-format": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.4.1", - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.4.1", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.4.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.4.1", - "@types/node": "*", - "jest-util": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.2.0", - "jest-snapshot": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.4.1", - "@jest/environment": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.2.0", - "jest-environment-node": "^29.4.1", - "jest-haste-map": "^29.4.1", - "jest-leak-detector": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-resolve": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-util": "^29.4.1", - "jest-watcher": "^29.4.1", - "jest-worker": "^29.4.1", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.4.1", - "@jest/fake-timers": "^29.4.1", - "@jest/globals": "^29.4.1", - "@jest/source-map": "^29.2.0", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@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.4.1", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "semver": "^7.3.5", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "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/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.4.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-haste-map": "^29.4.1", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", - "natural-compare": "^1.4.0", - "pretty-format": "^29.4.1", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.4.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.4.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", - "leven": "^3.1.0", - "pretty-format": "^29.4.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.4.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.4.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jmespath": { - "version": "0.16.0", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/js-sha256": { - "version": "0.9.0", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/json-cycle": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-refs": { - "version": "3.0.15", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "commander": "~4.1.1", - "graphlib": "^2.1.8", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "native-promise-only": "^0.8.1", - "path-loader": "^1.0.10", - "slash": "^3.0.0", - "uri-js": "^4.2.2" - }, - "bin": { - "json-refs": "bin/json-refs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/json-refs/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/json-refs/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "dev": true, - "license": "(MIT OR GPL-3.0-or-later)", - "peer": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/jwt-decode": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/keyv": { - "version": "4.5.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/log": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "duration": "^0.2.2", - "es5-ext": "^0.10.53", - "event-emitter": "^0.3.5", - "sprintf-kit": "^2.0.1", - "type": "^2.5.0", - "uni-global": "^1.0.0" - } - }, - "node_modules/log-node": { - "version": "8.0.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "cli-color": "^2.0.1", - "cli-sprintf-format": "^1.1.1", - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "sprintf-kit": "^2.0.1", - "supports-color": "^8.1.1", - "type": "^2.5.0" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "log": "^6.0.0" - } - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lru-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es5-ext": "~0.10.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/memoizee": { - "version": "0.4.15", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "4.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/mustache": { - "version": "4.2.0", - "license": "MIT", - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/native-promise-only": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ncjsm": { - "version": "4.3.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "builtin-modules": "^3.3.0", - "deferred": "^0.7.11", - "es5-ext": "^0.10.62", - "es6-set": "^0.1.6", - "ext": "^1.7.0", - "find-requires": "^1.0.0", - "fs2": "^0.3.9", - "type": "^2.7.2" - } - }, - "node_modules/near-api-js": { - "version": "1.1.0", - "license": "(MIT AND Apache-2.0)", - "dependencies": { - "bn.js": "5.2.1", - "borsh": "^0.7.0", - "bs58": "^4.0.0", - "depd": "^2.0.0", - "error-polyfill": "^0.1.3", - "http-errors": "^1.7.2", - "js-sha256": "^0.9.0", - "mustache": "^4.0.0", - "node-fetch": "^2.6.1", - "text-encoding-utf-8": "^1.0.2", - "tweetnacl": "^1.0.1" - } - }, - "node_modules/near-api-js/node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-dir": { - "version": "0.1.17", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", - "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-registry-utilities": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "ext": "^1.6.0", - "fs2": "^0.3.9", - "memoizee": "^0.4.15", - "node-fetch": "^2.6.7", - "semver": "^7.3.5", - "type": "^2.6.0", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/npm-registry-utilities/node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/o3": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "capability": "^0.2.5" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "node_modules/pako": { - "version": "1.0.11", - "dev": true, - "license": "(MIT AND Zlib)", - "peer": true - }, - "node_modules/param-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-loader": { - "version": "1.0.12", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "native-promise-only": "^0.8.1", - "superagent": "^7.1.6" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path2": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/peek-readable": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/pg": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.1.tgz", - "integrity": "sha512-utdq2obft07MxaDg0zBJI+l/M3mBRfIpEN3iSemsz0G5F2/VXx+XzqF4oxrbIZXQxt2AZzIUzyVg/YM6xOP/WQ==", - "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.6.1", - "pg-pool": "^3.6.1", - "pg-protocol": "^1.6.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.1.1" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.1.tgz", - "integrity": "sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==" - }, - "node_modules/pg-format": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pg-format/-/pg-format-1.0.4.tgz", - "integrity": "sha512-YyKEF78pEA6wwTAqOUaHIN/rWpfzzIuMh9KdAhc3rSLQ/7zkRFcCgYBAEGatDstLyZw4g0s9SNICmaTGnBVeyw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", - "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", - "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dependencies": { - "split2": "^4.1.0" - } - }, - "node_modules/pgpass/node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-format": { - "version": "29.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.4.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/process-utils": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "ext": "^1.4.0", - "fs2": "^0.3.9", - "memoizee": "^0.4.14", - "type": "^2.1.0" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/promise-queue": { - "version": "2.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.2", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-parallel-limit": { - "version": "1.1.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "node_modules/seek-bzip": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "commander": "^2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, - "node_modules/seek-bzip/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/semver": { - "version": "7.3.8", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sentence-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/serverless": { - "version": "3.27.0", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@serverless/dashboard-plugin": "^6.2.3", - "@serverless/platform-client": "^4.3.2", - "@serverless/utils": "^6.8.2", - "ajv": "^8.12.0", - "ajv-formats": "^2.1.1", - "archiver": "^5.3.1", - "aws-sdk": "^2.1303.0", - "bluebird": "^3.7.2", - "cachedir": "^2.3.0", - "chalk": "^4.1.2", - "child-process-ext": "^2.1.1", - "ci-info": "^3.7.1", - "cli-progress-footer": "^2.3.2", - "d": "^1.0.1", - "dayjs": "^1.11.7", - "decompress": "^4.2.1", - "dotenv": "^16.0.3", - "dotenv-expand": "^9.0.0", - "essentials": "^1.2.0", - "ext": "^1.7.0", - "fastest-levenshtein": "^1.0.16", - "filesize": "^10.0.6", - "fs-extra": "^10.1.0", - "get-stdin": "^8.0.0", - "globby": "^11.1.0", - "got": "^11.8.6", - "graceful-fs": "^4.2.10", - "https-proxy-agent": "^5.0.1", - "is-docker": "^2.2.1", - "js-yaml": "^4.1.0", - "json-cycle": "^1.3.0", - "json-refs": "^3.0.15", - "lodash": "^4.17.21", - "memoizee": "^0.4.15", - "micromatch": "^4.0.5", - "node-fetch": "^2.6.8", - "npm-registry-utilities": "^1.0.0", - "object-hash": "^3.0.0", - "open": "^8.4.0", - "path2": "^0.1.0", - "process-utils": "^4.0.0", - "promise-queue": "^2.2.5", - "require-from-string": "^2.0.2", - "semver": "^7.3.8", - "signal-exit": "^3.0.7", - "strip-ansi": "^6.0.1", - "supports-color": "^8.1.1", - "tar": "^6.1.13", - "timers-ext": "^0.1.7", - "type": "^2.7.2", - "untildify": "^4.0.0", - "uuid": "^9.0.0", - "yaml-ast-parser": "0.0.43" - }, - "bin": { - "serverless": "bin/serverless.js", - "sls": "bin/serverless.js" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/serverless-lift": { - "version": "1.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-cdk/aws-apigatewayv2-alpha": "^2.21.1-alpha.0", - "aws-cdk-lib": "^2.21.1", - "aws-sdk": "^2.942.0", - "chalk": "^4.1.1", - "change-case": "^4.1.2", - "cidr-split": "^0.1.2", - "constructs": "^10.0.127", - "inquirer": "^7.3.3", - "js-yaml": "^3.14.1", - "lodash": "^4.17.21", - "mime-types": "^2.1.31", - "ora": "^5.4.1", - "pascal-case": "^3.1.2", - "stripe": "^8.160.0", - "toml": "^3.0.0", - "traverse": "^0.6.6" - }, - "engines": { - "node": ">=14.15.0 <19" - }, - "peerDependencies": { - "serverless": "^2.36.0 || ^3" - } - }, - "node_modules/serverless-lift/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/serverless-lift/node_modules/inquirer": { - "version": "7.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/serverless-lift/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/serverless-lift/node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/serverless-lift/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/serverless/node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-git": { - "version": "3.16.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/steveukx/git-js?sponsor=1" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys-length": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/sprintf-kit": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es5-ext": "^0.10.53" - } - }, - "node_modules/stack-chain": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", - "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-promise": { - "version": "3.2.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "2-thenable": "^1.0.0", - "es5-ext": "^0.10.49", - "is-stream": "^1.1.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-dirs": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-natural-number": "^4.0.1" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-outer": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stripe": { - "version": "8.222.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": ">=8.1.0", - "qs": "^6.10.3" - }, - "engines": { - "node": "^8.1 || >=10.*" - } - }, - "node_modules/strtok3": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^4.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/superagent": { - "version": "7.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.3", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.0.1", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.10.3", - "readable-stream": "^3.6.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar": { - "version": "6.1.13", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2" - }, - "node_modules/throat": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/timers-ext": { - "version": "0.1.7", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-buffer": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/token-types": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/token-types/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/toml": { - "version": "3.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/traverse": { - "version": "0.6.7", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "license": "0BSD" - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "license": "Unlicense" - }, - "node_modules/type": { - "version": "2.7.2", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/u3": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/uni-global": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/upper-case": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.10.3", - "license": "MIT", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "license": "MIT" - }, - "node_modules/url/node_modules/querystring": { - "version": "0.2.0", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/util": { - "version": "0.12.5", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/vm2": { - "version": "3.9.17", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz", - "integrity": "sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==", - "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, - "node_modules/yamljs": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - }, - "bin": { - "json2yaml": "bin/json2yaml", - "yaml2json": "bin/yaml2json" - } - }, - "node_modules/yamljs/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/yargs": { - "version": "17.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zip-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@aws-cdk/asset-awscli-v1": { - "version": "2.2.52", - "dev": true - }, - "@aws-cdk/asset-kubectl-v20": { - "version": "2.1.1", - "dev": true - }, - "@aws-cdk/asset-node-proxy-agent-v5": { - "version": "2.0.42", - "dev": true - }, - "@aws-cdk/aws-apigatewayv2-alpha": { - "version": "2.21.1-alpha.0", - "dev": true, - "requires": {} - }, - "@aws-sdk/service-error-classification": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz", - "integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==" - }, - "@aws-sdk/types": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz", - "integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==", - "requires": { - "tslib": "^2.5.0" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.14", - "dev": true - }, - "@babel/core": { - "version": "7.20.12", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "dev": true - }, - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.20.14", - "dev": true, - "requires": { - "@babel/types": "^7.20.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.0", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.11", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "dev": true - }, - "@babel/helpers": { - "version": "7.20.13", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.13", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/template": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.20.13", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jest/console": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/types": "^29.4.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/console": "^29.4.1", - "@jest/reporters": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@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.4.0", - "jest-config": "^29.4.1", - "jest-haste-map": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-resolve-dependencies": "^29.4.1", - "jest-runner": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "jest-watcher": "^29.4.1", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.1", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "jest-mock": "^29.4.1" - } - }, - "@jest/expect": { - "version": "29.4.1", - "dev": true, - "requires": { - "expect": "^29.4.1", - "jest-snapshot": "^29.4.1" - } - }, - "@jest/expect-utils": { - "version": "29.4.1", - "dev": true, - "requires": { - "jest-get-type": "^29.2.0" - } - }, - "@jest/fake-timers": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/types": "^29.4.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" - } - }, - "@jest/globals": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/environment": "^29.4.1", - "@jest/expect": "^29.4.1", - "@jest/types": "^29.4.1", - "jest-mock": "^29.4.1" - } - }, - "@jest/reporters": { - "version": "29.4.1", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@jridgewell/trace-mapping": "^0.3.15", - "@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": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "29.4.0", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.25.16" - } - }, - "@jest/source-map": { - "version": "29.2.0", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/console": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/test-result": "^29.4.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.4.1", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.4.1", - "@jridgewell/trace-mapping": "^0.3.15", - "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.4.1", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.4.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.0" - }, - "dependencies": { - "write-file-atomic": { - "version": "5.0.0", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "@jest/types": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@kwsites/file-exists": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "debug": "^4.1.1" - } - }, - "@kwsites/promise-deferred": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "@near-lake/primitives": { - "version": "0.1.0" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "peer": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "peer": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "peer": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@serverless/dashboard-plugin": { - "version": "6.2.3", - "dev": true, - "peer": true, - "requires": { - "@serverless/event-mocks": "^1.1.1", - "@serverless/platform-client": "^4.3.2", - "@serverless/utils": "^6.8.2", - "child-process-ext": "^2.1.1", - "chokidar": "^3.5.3", - "flat": "^5.0.2", - "fs-extra": "^9.1.0", - "js-yaml": "^4.1.0", - "jszip": "^3.10.1", - "lodash": "^4.17.21", - "memoizee": "^0.4.15", - "ncjsm": "^4.3.2", - "node-dir": "^0.1.17", - "node-fetch": "^2.6.8", - "open": "^7.4.2", - "semver": "^7.3.8", - "simple-git": "^3.16.0", - "type": "^2.7.2", - "uuid": "^8.3.2", - "yamljs": "^0.3.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "dev": true, - "peer": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "open": { - "version": "7.4.2", - "dev": true, - "peer": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "uuid": { - "version": "8.3.2", - "dev": true, - "peer": true - } - } - }, - "@serverless/event-mocks": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "@types/lodash": "^4.14.123", - "lodash": "^4.17.11" - } - }, - "@serverless/platform-client": { - "version": "4.3.2", - "dev": true, - "peer": true, - "requires": { - "adm-zip": "^0.5.5", - "archiver": "^5.3.0", - "axios": "^0.21.1", - "fast-glob": "^3.2.7", - "https-proxy-agent": "^5.0.0", - "ignore": "^5.1.8", - "isomorphic-ws": "^4.0.1", - "js-yaml": "^3.14.1", - "jwt-decode": "^2.2.0", - "minimatch": "^3.0.4", - "querystring": "^0.2.1", - "run-parallel-limit": "^1.1.0", - "throat": "^5.0.0", - "traverse": "^0.6.6", - "ws": "^7.5.3" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "peer": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "peer": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@serverless/utils": { - "version": "6.8.2", - "dev": true, - "peer": true, - "requires": { - "archive-type": "^4.0.0", - "chalk": "^4.1.2", - "ci-info": "^3.5.0", - "cli-progress-footer": "^2.3.2", - "content-disposition": "^0.5.4", - "d": "^1.0.1", - "decompress": "^4.2.1", - "event-emitter": "^0.3.5", - "ext": "^1.7.0", - "ext-name": "^5.0.0", - "file-type": "^16.5.4", - "filenamify": "^4.3.0", - "get-stream": "^6.0.1", - "got": "^11.8.5", - "inquirer": "^8.2.5", - "js-yaml": "^4.1.0", - "jwt-decode": "^3.1.2", - "lodash": "^4.17.21", - "log": "^6.3.1", - "log-node": "^8.0.3", - "make-dir": "^3.1.0", - "memoizee": "^0.4.15", - "ncjsm": "^4.3.1", - "node-fetch": "^2.6.7", - "open": "^8.4.0", - "p-event": "^4.2.0", - "supports-color": "^8.1.1", - "timers-ext": "^0.1.7", - "type": "^2.7.2", - "uni-global": "^1.0.0", - "uuid": "^8.3.2", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "jwt-decode": { - "version": "3.1.2", - "dev": true, - "peer": true - }, - "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "dev": true, - "peer": true - } - } - }, - "@sinclair/typebox": { - "version": "0.25.21", - "dev": true - }, - "@sindresorhus/is": { - "version": "4.6.0", - "dev": true, - "peer": true - }, - "@sinonjs/commons": { - "version": "2.0.0", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.0.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^2.0.0" - } - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "dev": true, - "peer": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@tokenizer/token": { - "version": "0.3.0", - "dev": true, - "peer": true - }, - "@types/babel__core": { - "version": "7.20.0", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.3", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/cacheable-request": { - "version": "6.0.3", - "dev": true, - "peer": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "@types/cls-hooked": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.3.tgz", - "integrity": "sha512-gNstDTb/ty5h6gJd6YpSPgsLX9LmRpaKJqGFp7MRlYxhwp4vXXKlJ9+bt1TZ9KbVNXE+Mbxy2AYXcpY21DDtJw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "dev": true, - "peer": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/keyv": { - "version": "3.1.4", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.191", - "dev": true, - "peer": true - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/mysql": { - "version": "2.15.21", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.21.tgz", - "integrity": "sha512-NPotx5CVful7yB+qZbWtXL2fA4e7aEHkihHLjklc6ID8aq7bhguHgeIoC1EmSNTAuCgI6ZXrjt2ZSaXnYX0EUg==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "18.11.18" - }, - "@types/pg": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.6.tgz", - "integrity": "sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==", - "requires": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, - "@types/prettier": { - "version": "2.7.2", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/responselike": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/yargs": { - "version": "17.0.22", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "dev": true - }, - "2-thenable": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.47" - } - }, - "acorn": { - "version": "8.8.2" - }, - "acorn-walk": { - "version": "8.2.0" - }, - "adm-zip": { - "version": "0.5.10", - "dev": true, - "peer": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "peer": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "8.12.0", - "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "archive-type": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "dev": true, - "peer": true - } - } - }, - "archiver": { - "version": "5.3.1", - "dev": true, - "peer": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.3", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - } - }, - "archiver-utils": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "argparse": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "array-union": { - "version": "2.1.0", - "dev": true, - "peer": true - }, - "asap": { - "version": "2.0.6", - "dev": true, - "peer": true - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "async": { - "version": "3.2.4", - "dev": true, - "peer": true - }, - "async-hook-jl": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", - "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", - "requires": { - "stack-chain": "^1.3.7" - } - }, - "asynckit": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "at-least-node": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "atomic-batcher": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", - "integrity": "sha512-EFGCRj4kLX1dHv1cDzTk+xbjBFj1GnJDpui52YmEcxxHHEWjYyT6l51U7n6WQ28osZH4S9gSybxe56Vm7vB61Q==" - }, - "available-typed-arrays": { - "version": "1.0.5" - }, - "aws-cdk-lib": { - "version": "2.63.0", - "dev": true, - "requires": { - "@aws-cdk/asset-awscli-v1": "^2.2.52", - "@aws-cdk/asset-kubectl-v20": "^2.1.1", - "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.42", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^9.1.0", - "ignore": "^5.2.4", - "jsonschema": "^1.4.1", - "minimatch": "^3.1.2", - "punycode": "^2.3.0", - "semver": "^7.3.8", - "yaml": "1.10.2" - }, - "dependencies": { - "@balena/dockerignore": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "case": { - "version": "1.6.3", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "fs-extra": { - "version": "9.1.0", - "bundled": true, - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "bundled": true, - "dev": true - }, - "ignore": { - "version": "5.2.4", - "bundled": true, - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonschema": { - "version": "1.4.1", - "bundled": true, - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "punycode": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "semver": { - "version": "7.3.8", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "yaml": { - "version": "1.10.2", - "bundled": true, - "dev": true - } - } - }, - "aws-sdk": { - "version": "2.1369.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1369.0.tgz", - "integrity": "sha512-DdCQjlhQDi9w8J4moqECrrp9ARWCay0UI38adPSS0GG43gh3bl3OoMlgKJ8aZxi4jUvzE48K9yhFHz4y/mazZw==", - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.5.0" - }, - "dependencies": { - "querystring": { - "version": "0.2.0" - }, - "uuid": { - "version": "8.0.0" - } - } - }, - "aws-xray-sdk": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-3.5.0.tgz", - "integrity": "sha512-u9iKR9QAafeoCVk4J1PH6/NbNc/dNsF5T9CoNAST7bMLnGwT9YN4l+N9zxLbuspWv8cdBPoz8dDfbyZNDHgYQQ==", - "requires": { - "aws-xray-sdk-core": "3.5.0", - "aws-xray-sdk-express": "3.5.0", - "aws-xray-sdk-mysql": "3.5.0", - "aws-xray-sdk-postgres": "3.5.0" - } - }, - "aws-xray-sdk-core": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-3.5.0.tgz", - "integrity": "sha512-T3mL9mGwnfGyZrf7RsZp702+prTCEMzX7zrqD7flwMZeb6ymXlSgREmeXys80r/9CHFgq/+JR+IclM+hep0yRw==", - "requires": { - "@aws-sdk/service-error-classification": "^3.4.1", - "@aws-sdk/types": "^3.4.1", - "@types/cls-hooked": "^4.3.3", - "atomic-batcher": "^1.0.2", - "cls-hooked": "^4.2.2", - "semver": "^7.3.8" - } - }, - "aws-xray-sdk-express": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-3.5.0.tgz", - "integrity": "sha512-nbdghqiHPUe7P04guh/fkBmHCsbY5pwQrDFJAqYimNK3EsB+pq2/FW7m9vodPmHSbqeTgwO/oQUiCnEQ9luf5A==", - "requires": { - "@types/express": "*" - } - }, - "aws-xray-sdk-mysql": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-3.5.0.tgz", - "integrity": "sha512-vAEfSPMQq48Fg3H45voljAJT8KX79tLEzW1qz6Kb9Gqv11wihu05074L/DArQnvHnG0DaCPttZD7/nOGFc6sYA==", - "requires": { - "@types/mysql": "*" - } - }, - "aws-xray-sdk-postgres": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-3.5.0.tgz", - "integrity": "sha512-3LadT1yuZYLS9RlqdgDQt5z3vojevrggnuGofT2EqsS5EQBVz7NNLYrJdTJsd4TYVVsToNxDBQI5peb2HC8TRw==", - "requires": { - "@types/pg": "*" - } - }, - "axios": { - "version": "0.21.4", - "dev": true, - "peer": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "babel-jest": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/transform": "^29.4.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@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" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.4.0", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "requires": { - "@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" - } - }, - "babel-preset-jest": { - "version": "29.4.0", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.4.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1" - }, - "bignumber.js": { - "version": "7.2.1", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true, - "peer": true - }, - "bl": { - "version": "4.1.0", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "bluebird": { - "version": "3.7.2", - "dev": true, - "peer": true - }, - "bn.js": { - "version": "5.2.1" - }, - "borsh": { - "version": "0.7.0", - "requires": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.5", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "bs58": { - "version": "4.0.1", - "requires": { - "base-x": "^3.0.2" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "buffer-crc32": { - "version": "0.2.13", - "dev": true, - "peer": true - }, - "buffer-fill": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" - }, - "builtin-modules": { - "version": "3.3.0", - "dev": true, - "peer": true - }, - "builtins": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "cacheable-lookup": { - "version": "5.0.4", - "dev": true, - "peer": true - }, - "cacheable-request": { - "version": "7.0.2", - "dev": true, - "peer": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "dev": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "cachedir": { - "version": "2.3.0", - "dev": true, - "peer": true - }, - "call-bind": { - "version": "1.0.2", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001450", - "dev": true - }, - "capability": { - "version": "0.2.5" - }, - "capital-case": { - "version": "1.0.4", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "change-case": { - "version": "4.1.2", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "dev": true - }, - "child-process-ext": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "cross-spawn": "^6.0.5", - "es5-ext": "^0.10.53", - "log": "^6.0.0", - "split2": "^3.1.1", - "stream-promise": "^3.2.0" - } - }, - "chokidar": { - "version": "3.5.3", - "dev": true, - "peer": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "ci-info": { - "version": "3.7.1", - "dev": true - }, - "cidr-split": { - "version": "0.1.2", - "dev": true, - "requires": { - "bignumber.js": "7.2.1" - } - }, - "cjs-module-lexer": { - "version": "1.2.2", - "dev": true - }, - "cli-color": { - "version": "2.0.3", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - } - }, - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-progress-footer": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "cli-color": "^2.0.2", - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "mute-stream": "0.0.8", - "process-utils": "^4.0.0", - "timers-ext": "^0.1.7", - "type": "^2.6.0" - } - }, - "cli-spinners": { - "version": "2.7.0", - "dev": true - }, - "cli-sprintf-format": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "cli-color": "^2.0.1", - "es5-ext": "^0.10.53", - "sprintf-kit": "^2.0.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "dev": true, - "peer": true - }, - "supports-color": { - "version": "6.1.0", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "dev": true - }, - "clone-response": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "cls-hooked": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", - "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", - "requires": { - "async-hook-jl": "^1.7.6", - "emitter-listener": "^1.0.1", - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "peer": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "dev": true, - "peer": true - }, - "component-emitter": { - "version": "1.3.0", - "dev": true, - "peer": true - }, - "compress-commons": { - "version": "4.1.1", - "dev": true, - "peer": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - } - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "constant-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "constructs": { - "version": "10.1.236", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "convert-source-map": { - "version": "2.0.0", - "dev": true - }, - "cookiejar": { - "version": "2.1.4", - "dev": true, - "peer": true - }, - "core-util-is": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "crc-32": { - "version": "1.2.2", - "dev": true, - "peer": true - }, - "crc32-stream": { - "version": "4.0.2", - "dev": true, - "peer": true, - "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - } - } - }, - "d": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - }, - "dependencies": { - "type": { - "version": "1.2.0", - "dev": true, - "peer": true - } - } - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" - }, - "dayjs": { - "version": "1.11.7", - "dev": true, - "peer": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decompress": { - "version": "4.2.1", - "dev": true, - "peer": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "dev": true, - "peer": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "dev": true, - "peer": true - } - } - } - } - }, - "decompress-response": { - "version": "6.0.0", - "dev": true, - "peer": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "dev": true, - "peer": true - } - } - }, - "decompress-tar": { - "version": "4.1.1", - "dev": true, - "peer": true, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "bl": { - "version": "1.2.3", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "file-type": { - "version": "5.2.0", - "dev": true, - "peer": true - }, - "readable-stream": { - "version": "2.3.7", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tar-stream": { - "version": "1.6.2", - "dev": true, - "peer": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "dev": true, - "peer": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "dev": true, - "peer": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "dev": true, - "peer": true, - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "dev": true, - "peer": true - } - } - }, - "decompress-unzip": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "dev": true, - "peer": true - }, - "get-stream": { - "version": "2.3.1", - "dev": true, - "peer": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "dedent": { - "version": "0.7.0", - "dev": true - }, - "deepmerge": { - "version": "4.3.0", - "dev": true - }, - "defaults": { - "version": "1.0.4", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "deferred": { - "version": "0.7.11", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.50", - "event-emitter": "^0.3.5", - "next-tick": "^1.0.0", - "timers-ext": "^0.1.7" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "depd": { - "version": "2.0.0" - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "dev": true, - "peer": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff-sequences": { - "version": "29.3.1", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dot-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "16.0.3", - "dev": true, - "peer": true - }, - "dotenv-expand": { - "version": "9.0.0", - "dev": true, - "peer": true - }, - "duration": { - "version": "0.2.2", - "dev": true, - "peer": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.46" - } - }, - "electron-to-chromium": { - "version": "1.4.284", - "dev": true - }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "requires": { - "shimmer": "^1.2.0" - } - }, - "emittery": { - "version": "0.13.1", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "peer": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-polyfill": { - "version": "0.1.3", - "requires": { - "capability": "^0.2.5", - "o3": "^1.0.3", - "u3": "^0.1.1" - } - }, - "es5-ext": { - "version": "0.10.62", - "dev": true, - "peer": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "dev": true, - "peer": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-set": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - } - }, - "es6-symbol": { - "version": "3.1.3", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "dev": true, - "peer": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "esniff": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.12" - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "essentials": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "uni-global": "^1.0.0" - } - }, - "event-emitter": { - "version": "0.3.5", - "dev": true, - "peer": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "events": { - "version": "1.1.1" - }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "exit": { - "version": "0.1.2", - "dev": true - }, - "expect": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1" - } - }, - "ext": { - "version": "1.7.0", - "dev": true, - "peer": true, - "requires": { - "type": "^2.7.2" - } - }, - "ext-list": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "dev": true, - "peer": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } - }, - "external-editor": { - "version": "3.1.0", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "peer": true - }, - "fast-glob": { - "version": "3.2.12", - "dev": true, - "peer": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-safe-stringify": { - "version": "2.1.1", - "dev": true, - "peer": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "dev": true, - "peer": true - }, - "fastq": { - "version": "1.15.0", - "dev": true, - "peer": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fd-slicer": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "pend": "~1.2.0" - } - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "figures": { - "version": "3.2.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-type": { - "version": "16.5.4", - "dev": true, - "peer": true, - "requires": { - "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.2.4", - "token-types": "^4.1.1" - } - }, - "filename-reserved-regex": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "filenamify": { - "version": "4.3.0", - "dev": true, - "peer": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - } - }, - "filesize": { - "version": "10.0.6", - "dev": true, - "peer": true - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-requires": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "es5-ext": "^0.10.49", - "esniff": "^1.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "dev": true, - "peer": true - }, - "follow-redirects": { - "version": "1.15.2", - "dev": true, - "peer": true - }, - "for-each": { - "version": "0.3.3", - "requires": { - "is-callable": "^1.1.3" - } - }, - "form-data": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "formidable": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "fs-extra": { - "version": "10.1.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "fs2": { - "version": "0.3.9", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "deferred": "^0.7.11", - "es5-ext": "^0.10.53", - "event-emitter": "^0.3.5", - "ignore": "^5.1.8", - "memoizee": "^0.4.14", - "type": "^2.1.0" - } - }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1" - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-stdin": { - "version": "8.0.0", - "dev": true, - "peer": true - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.1.0", - "dev": true, - "peer": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "got": { - "version": "11.8.6", - "dev": true, - "peer": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "dev": true - }, - "graphlib": { - "version": "2.1.8", - "dev": true, - "peer": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "has": { - "version": "1.0.3", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.3" - }, - "has-tostringtag": { - "version": "1.0.0", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "header-case": { - "version": "2.0.4", - "dev": true, - "requires": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, - "hexoid": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "peer": true - }, - "http-errors": { - "version": "1.8.1", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2" - } - } - }, - "http2-wrapper": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "peer": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13" - }, - "ignore": { - "version": "5.2.4", - "dev": true, - "peer": true - }, - "immediate": { - "version": "3.0.6", - "dev": true, - "peer": true - }, - "import-local": { - "version": "3.1.0", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "inquirer": { - "version": "8.2.5", - "dev": true, - "peer": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-callable": { - "version": "1.2.7" - }, - "is-core-module": { - "version": "2.11.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "peer": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "dev": true - }, - "is-natural-number": { - "version": "4.0.1", - "dev": true, - "peer": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "is-promise": { - "version": "2.2.2", - "dev": true, - "peer": true - }, - "is-stream": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "is-typed-array": { - "version": "1.1.10", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "peer": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0" - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isomorphic-ws": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": {} - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/core": "^29.4.1", - "@jest/types": "^29.4.1", - "import-local": "^3.0.2", - "jest-cli": "^29.4.1" - } - }, - "jest-changed-files": { - "version": "29.4.0", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/environment": "^29.4.1", - "@jest/expect": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.1", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "p-limit": "^3.1.0", - "pretty-format": "^29.4.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/core": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.4.1", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.1", - "@jest/types": "^29.4.1", - "babel-jest": "^29.4.1", - "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.4.1", - "jest-environment-node": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-runner": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.4.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "29.4.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" - } - }, - "jest-docblock": { - "version": "29.2.0", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/types": "^29.4.1", - "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", - "jest-util": "^29.4.1", - "pretty-format": "^29.4.1" - } - }, - "jest-environment-node": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/environment": "^29.4.1", - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" - } - }, - "jest-get-type": { - "version": "29.2.0", - "dev": true - }, - "jest-haste-map": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/types": "^29.4.1", - "@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.2.0", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.4.1", - "dev": true, - "requires": { - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" - } - }, - "jest-matcher-utils": { - "version": "29.4.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.4.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" - } - }, - "jest-message-util": { - "version": "29.4.1", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/types": "^29.4.1", - "@types/node": "*", - "jest-util": "^29.4.1" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.2.0", - "dev": true - }, - "jest-resolve": { - "version": "29.4.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "29.4.1", - "dev": true, - "requires": { - "jest-regex-util": "^29.2.0", - "jest-snapshot": "^29.4.1" - } - }, - "jest-runner": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/console": "^29.4.1", - "@jest/environment": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.2.0", - "jest-environment-node": "^29.4.1", - "jest-haste-map": "^29.4.1", - "jest-leak-detector": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-resolve": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-util": "^29.4.1", - "jest-watcher": "^29.4.1", - "jest-worker": "^29.4.1", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - } - }, - "jest-runtime": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/environment": "^29.4.1", - "@jest/fake-timers": "^29.4.1", - "@jest/globals": "^29.4.1", - "@jest/source-map": "^29.2.0", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@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.4.1", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "semver": "^7.3.5", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "29.4.1", - "dev": true, - "requires": { - "@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/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.4.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-haste-map": "^29.4.1", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", - "natural-compare": "^1.4.0", - "pretty-format": "^29.4.1", - "semver": "^7.3.5" - } - }, - "jest-util": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/types": "^29.4.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/types": "^29.4.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", - "leven": "^3.1.0", - "pretty-format": "^29.4.1" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "dev": true - } - } - }, - "jest-watcher": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.4.1", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "29.4.1", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.4.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "jmespath": { - "version": "0.16.0" - }, - "js-sha256": { - "version": "0.9.0" - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "dev": true, - "peer": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "dev": true, - "peer": true - }, - "json-cycle": { - "version": "1.3.0", - "dev": true, - "peer": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true - }, - "json-refs": { - "version": "3.0.15", - "dev": true, - "peer": true, - "requires": { - "commander": "~4.1.1", - "graphlib": "^2.1.8", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "native-promise-only": "^0.8.1", - "path-loader": "^1.0.10", - "slash": "^3.0.0", - "uri-js": "^4.2.2" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "peer": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "peer": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "json5": { - "version": "2.2.3", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jszip": { - "version": "3.10.1", - "dev": true, - "peer": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "jwt-decode": { - "version": "2.2.0", - "dev": true, - "peer": true - }, - "keyv": { - "version": "4.5.2", - "dev": true, - "peer": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "kleur": { - "version": "3.0.3", - "dev": true - }, - "lazystream": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "leven": { - "version": "3.1.0", - "dev": true - }, - "lie": { - "version": "3.3.0", - "dev": true, - "peer": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "dev": true, - "peer": true - }, - "lodash.difference": { - "version": "4.5.0", - "dev": true, - "peer": true - }, - "lodash.flatten": { - "version": "4.4.0", - "dev": true, - "peer": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "dev": true, - "peer": true - }, - "lodash.union": { - "version": "4.6.0", - "dev": true, - "peer": true - }, - "log": { - "version": "6.3.1", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "duration": "^0.2.2", - "es5-ext": "^0.10.53", - "event-emitter": "^0.3.5", - "sprintf-kit": "^2.0.1", - "type": "^2.5.0", - "uni-global": "^1.0.0" - } - }, - "log-node": { - "version": "8.0.3", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^5.0.1", - "cli-color": "^2.0.1", - "cli-sprintf-format": "^1.1.1", - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "sprintf-kit": "^2.0.1", - "supports-color": "^8.1.1", - "type": "^2.5.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lower-case": { - "version": "2.0.2", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "lru-cache": { - "version": "6.0.0", - "requires": { - "yallist": "^4.0.0" - } - }, - "lru-queue": { - "version": "0.1.0", - "dev": true, - "peer": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "memoizee": { - "version": "0.4.15", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true, - "peer": true - }, - "methods": { - "version": "1.1.2", - "dev": true, - "peer": true - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "dev": true, - "peer": true - }, - "mime-db": { - "version": "1.52.0", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minipass": { - "version": "4.0.1", - "dev": true, - "peer": true - }, - "minizlib": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "mustache": { - "version": "4.2.0" - }, - "mute-stream": { - "version": "0.0.8", - "dev": true - }, - "native-promise-only": { - "version": "0.8.1", - "dev": true, - "peer": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "ncjsm": { - "version": "4.3.2", - "dev": true, - "peer": true, - "requires": { - "builtin-modules": "^3.3.0", - "deferred": "^0.7.11", - "es5-ext": "^0.10.62", - "es6-set": "^0.1.6", - "ext": "^1.7.0", - "find-requires": "^1.0.0", - "fs2": "^0.3.9", - "type": "^2.7.2" - } - }, - "near-api-js": { - "version": "1.1.0", - "requires": { - "bn.js": "5.2.1", - "borsh": "^0.7.0", - "bs58": "^4.0.0", - "depd": "^2.0.0", - "error-polyfill": "^0.1.3", - "http-errors": "^1.7.2", - "js-sha256": "^0.9.0", - "mustache": "^4.0.0", - "node-fetch": "^2.6.1", - "text-encoding-utf-8": "^1.0.2", - "tweetnacl": "^1.0.1" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "next-tick": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "nice-try": { - "version": "1.0.5", - "dev": true, - "peer": true - }, - "no-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-dir": { - "version": "0.1.17", - "dev": true, - "peer": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" - }, - "node-fetch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", - "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-releases": { - "version": "2.0.9", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "dev": true, - "peer": true - }, - "npm-registry-utilities": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "ext": "^1.6.0", - "fs2": "^0.3.9", - "memoizee": "^0.4.15", - "node-fetch": "^2.6.7", - "semver": "^7.3.5", - "type": "^2.6.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - }, - "dependencies": { - "path-key": { - "version": "3.1.1", - "dev": true - } - } - }, - "o3": { - "version": "1.0.3", - "requires": { - "capability": "^0.2.5" - } - }, - "object-assign": { - "version": "4.1.1", - "dev": true, - "peer": true - }, - "object-hash": { - "version": "3.0.0", - "dev": true, - "peer": true - }, - "object-inspect": { - "version": "1.12.3", - "dev": true - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "dev": true, - "peer": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "5.4.1", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true - }, - "p-cancelable": { - "version": "2.1.1", - "dev": true, - "peer": true - }, - "p-event": { - "version": "4.2.0", - "dev": true, - "peer": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-timeout": { - "version": "3.2.0", - "dev": true, - "peer": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "pako": { - "version": "1.0.11", - "dev": true, - "peer": true - }, - "param-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parse-json": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "pascal-case": { - "version": "3.1.2", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "path-loader": { - "version": "1.0.12", - "dev": true, - "peer": true, - "requires": { - "native-promise-only": "^0.8.1", - "superagent": "^7.1.6" - } - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true, - "peer": true - }, - "path2": { - "version": "0.1.0", - "dev": true, - "peer": true - }, - "peek-readable": { - "version": "4.1.0", - "dev": true, - "peer": true - }, - "pend": { - "version": "1.2.0", - "dev": true, - "peer": true - }, - "pg": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.1.tgz", - "integrity": "sha512-utdq2obft07MxaDg0zBJI+l/M3mBRfIpEN3iSemsz0G5F2/VXx+XzqF4oxrbIZXQxt2AZzIUzyVg/YM6xOP/WQ==", - "requires": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-cloudflare": "^1.1.1", - "pg-connection-string": "^2.6.1", - "pg-pool": "^3.6.1", - "pg-protocol": "^1.6.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - } - }, - "pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", - "optional": true - }, - "pg-connection-string": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.1.tgz", - "integrity": "sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==" - }, - "pg-format": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pg-format/-/pg-format-1.0.4.tgz", - "integrity": "sha512-YyKEF78pEA6wwTAqOUaHIN/rWpfzzIuMh9KdAhc3rSLQ/7zkRFcCgYBAEGatDstLyZw4g0s9SNICmaTGnBVeyw==" - }, - "pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" - }, - "pg-pool": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", - "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", - "requires": {} - }, - "pg-protocol": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", - "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" - }, - "pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "requires": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - } - }, - "pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "requires": { - "split2": "^4.1.0" - }, - "dependencies": { - "split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" - } - } - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "pify": { - "version": "2.3.0", - "dev": true, - "peer": true - }, - "pinkie": { - "version": "2.0.4", - "dev": true, - "peer": true - }, - "pinkie-promise": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.5", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" - }, - "postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" - }, - "postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" - }, - "postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" - }, - "postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "requires": { - "xtend": "^4.0.0" - } - }, - "pretty-format": { - "version": "29.4.1", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "process-utils": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "ext": "^1.4.0", - "fs2": "^0.3.9", - "memoizee": "^0.4.14", - "type": "^2.1.0" - } - }, - "promise-queue": { - "version": "2.2.5", - "dev": true, - "peer": true - }, - "prompts": { - "version": "2.4.2", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "pump": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.3.0", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.11.0", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystring": { - "version": "0.2.1", - "dev": true, - "peer": true - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true, - "peer": true - }, - "quick-lru": { - "version": "5.1.1", - "dev": true, - "peer": true - }, - "react-is": { - "version": "18.2.0", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readable-web-to-node-stream": { - "version": "3.0.2", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "^3.6.0" - } - }, - "readdir-glob": { - "version": "1.1.2", - "dev": true, - "peer": true, - "requires": { - "minimatch": "^5.1.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "peer": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "dev": true, - "peer": true - }, - "resolve": { - "version": "1.22.1", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "dev": true, - "peer": true - }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "dev": true - }, - "resolve.exports": { - "version": "2.0.0", - "dev": true - }, - "responselike": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "dev": true, - "peer": true - }, - "run-async": { - "version": "2.4.1", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-parallel-limit": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.0", - "dev": true, - "peer": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1" - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "seek-bzip": { - "version": "1.0.6", - "dev": true, - "peer": true, - "requires": { - "commander": "^2.8.1" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "dev": true, - "peer": true - } - } - }, - "semver": { - "version": "7.3.8", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "sentence-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "serverless": { - "version": "3.27.0", - "dev": true, - "peer": true, - "requires": { - "@serverless/dashboard-plugin": "^6.2.3", - "@serverless/platform-client": "^4.3.2", - "@serverless/utils": "^6.8.2", - "ajv": "^8.12.0", - "ajv-formats": "^2.1.1", - "archiver": "^5.3.1", - "aws-sdk": "^2.1303.0", - "bluebird": "^3.7.2", - "cachedir": "^2.3.0", - "chalk": "^4.1.2", - "child-process-ext": "^2.1.1", - "ci-info": "^3.7.1", - "cli-progress-footer": "^2.3.2", - "d": "^1.0.1", - "dayjs": "^1.11.7", - "decompress": "^4.2.1", - "dotenv": "^16.0.3", - "dotenv-expand": "^9.0.0", - "essentials": "^1.2.0", - "ext": "^1.7.0", - "fastest-levenshtein": "^1.0.16", - "filesize": "^10.0.6", - "fs-extra": "^10.1.0", - "get-stdin": "^8.0.0", - "globby": "^11.1.0", - "got": "^11.8.6", - "graceful-fs": "^4.2.10", - "https-proxy-agent": "^5.0.1", - "is-docker": "^2.2.1", - "js-yaml": "^4.1.0", - "json-cycle": "^1.3.0", - "json-refs": "^3.0.15", - "lodash": "^4.17.21", - "memoizee": "^0.4.15", - "micromatch": "^4.0.5", - "node-fetch": "^2.6.8", - "npm-registry-utilities": "^1.0.0", - "object-hash": "^3.0.0", - "open": "^8.4.0", - "path2": "^0.1.0", - "process-utils": "^4.0.0", - "promise-queue": "^2.2.5", - "require-from-string": "^2.0.2", - "semver": "^7.3.8", - "signal-exit": "^3.0.7", - "strip-ansi": "^6.0.1", - "supports-color": "^8.1.1", - "tar": "^6.1.13", - "timers-ext": "^0.1.7", - "type": "^2.7.2", - "untildify": "^4.0.0", - "uuid": "^9.0.0", - "yaml-ast-parser": "0.0.43" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "serverless-lift": { - "version": "1.21.0", - "dev": true, - "requires": { - "@aws-cdk/aws-apigatewayv2-alpha": "^2.21.1-alpha.0", - "aws-cdk-lib": "^2.21.1", - "aws-sdk": "^2.942.0", - "chalk": "^4.1.1", - "change-case": "^4.1.2", - "cidr-split": "^0.1.2", - "constructs": "^10.0.127", - "inquirer": "^7.3.3", - "js-yaml": "^3.14.1", - "lodash": "^4.17.21", - "mime-types": "^2.1.31", - "ora": "^5.4.1", - "pascal-case": "^3.1.2", - "stripe": "^8.160.0", - "toml": "^3.0.0", - "traverse": "^0.6.6" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "inquirer": { - "version": "7.3.3", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "rxjs": { - "version": "6.6.7", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "dev": true - } - } - }, - "setimmediate": { - "version": "1.0.5", - "dev": true, - "peer": true - }, - "setprototypeof": { - "version": "1.2.0" - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "dev": true - }, - "simple-git": { - "version": "3.16.0", - "dev": true, - "peer": true, - "requires": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.4" - } - }, - "sisteransi": { - "version": "1.0.5", - "dev": true - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "snake-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "sort-keys": { - "version": "1.1.2", - "dev": true, - "peer": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "sort-keys": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "dev": true - }, - "source-map-support": { - "version": "0.5.13", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "split2": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "sprintf-kit": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "es5-ext": "^0.10.53" - } - }, - "stack-chain": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", - "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==" - }, - "stack-utils": { - "version": "2.0.6", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } - } - }, - "statuses": { - "version": "1.5.0" - }, - "stream-promise": { - "version": "3.2.0", - "dev": true, - "peer": true, - "requires": { - "2-thenable": "^1.0.0", - "es5-ext": "^0.10.49", - "is-stream": "^1.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-length": { - "version": "4.0.2", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "dev": true - }, - "strip-dirs": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "strip-outer": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "stripe": { - "version": "8.222.0", - "dev": true, - "requires": { - "@types/node": ">=8.1.0", - "qs": "^6.10.3" - } - }, - "strtok3": { - "version": "6.3.0", - "dev": true, - "peer": true, - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^4.1.0" - } - }, - "superagent": { - "version": "7.1.6", - "dev": true, - "peer": true, - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.3", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.0.1", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.10.3", - "readable-stream": "^3.6.0", - "semver": "^7.3.7" - } - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "tar": { - "version": "6.1.13", - "dev": true, - "peer": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "tar-stream": { - "version": "2.2.0", - "dev": true, - "peer": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-encoding-utf-8": { - "version": "1.0.2" - }, - "throat": { - "version": "5.0.0", - "dev": true, - "peer": true - }, - "through": { - "version": "2.3.8", - "dev": true - }, - "timers-ext": { - "version": "0.1.7", - "dev": true, - "peer": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.5", - "dev": true - }, - "to-buffer": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1" - }, - "token-types": { - "version": "4.2.1", - "dev": true, - "peer": true, - "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "dependencies": { - "ieee754": { - "version": "1.2.1", - "dev": true, - "peer": true - } - } - }, - "toml": { - "version": "3.0.0", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "traverse": { - "version": "0.6.7", - "dev": true - }, - "trim-repeated": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "tslib": { - "version": "2.5.0" - }, - "tweetnacl": { - "version": "1.0.3" - }, - "type": { - "version": "2.7.2", - "dev": true, - "peer": true - }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "dev": true - }, - "u3": { - "version": "0.1.1" - }, - "unbzip2-stream": { - "version": "1.4.3", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "uni-global": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "type": "^2.5.0" - } - }, - "universalify": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "untildify": { - "version": "4.0.0", - "dev": true, - "peer": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "upper-case": { - "version": "2.0.2", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "upper-case-first": { - "version": "2.0.2", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "peer": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.10.3", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2" - }, - "querystring": { - "version": "0.2.0" - } - } - }, - "util": { - "version": "0.12.5", - "requires": { - "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" - } - }, - "util-deprecate": { - "version": "1.0.2", - "dev": true - }, - "uuid": { - "version": "9.0.0", - "dev": true, - "peer": true - }, - "v8-to-istanbul": { - "version": "9.0.1", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "dev": true - } - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - } - } - }, - "vm2": { - "version": "3.9.17", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz", - "integrity": "sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==", - "requires": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - } - }, - "walker": { - "version": "1.0.8", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "wcwidth": { - "version": "1.0.1", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-typed-array": { - "version": "1.1.9", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "dev": true, - "peer": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "7.5.9", - "dev": true, - "peer": true, - "requires": {} - }, - "xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "xtend": { - "version": "4.0.2" - }, - "y18n": { - "version": "5.0.8", - "dev": true - }, - "yallist": { - "version": "4.0.0" - }, - "yaml-ast-parser": { - "version": "0.0.43", - "dev": true, - "peer": true - }, - "yamljs": { - "version": "0.3.0", - "dev": true, - "peer": true, - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "peer": true, - "requires": { - "sprintf-js": "~1.0.2" - } - } - } - }, - "yargs": { - "version": "17.6.2", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "dev": true - }, - "yauzl": { - "version": "2.10.0", - "dev": true, - "peer": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "dev": true - }, - "zip-stream": { - "version": "4.1.0", - "dev": true, - "peer": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - } - } - } -} diff --git a/indexer-js-queue-handler/package.json b/indexer-js-queue-handler/package.json deleted file mode 100644 index 0ff9c7b24..000000000 --- a/indexer-js-queue-handler/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "queryapi", - "version": "1.0.0", - "description": "Demo version of QueryApi IndexerFunction runner AWS Lambda function", - "author": "", - "license": "MIT", - "type": "module", - "scripts": { - "test": "node --experimental-vm-modules ./node_modules/.bin/jest", - "test:debug": "node --experimental-vm-modules --inspect-brk ./node_modules/.bin/jest", - "deploy": "sls deploy", - "remove": "sls remove", - "lift": "sls lift" - }, - "dependencies": { - "@near-lake/primitives": "^0.1.0", - "aws-sdk": "^2.1369.0", - "aws-xray-sdk": "^3.5.0", - "near-api-js": "1.1.0", - "node-fetch": "^3.3.0", - "pg": "^8.11.1", - "pg-format": "^1.0.4", - "pluralize": "^8.0.0", - "verror": "^1.10.1", - "vm2": "^3.9.13" - }, - "devDependencies": { - "jest": "^29.4.1", - "serverless-lift": "^1.1.2" - } -} diff --git a/indexer-js-queue-handler/pg-client.js b/indexer-js-queue-handler/pg-client.js deleted file mode 100644 index 5ed2cdd82..000000000 --- a/indexer-js-queue-handler/pg-client.js +++ /dev/null @@ -1,30 +0,0 @@ -import pg from "pg"; -import pgFormatModule from "pg-format"; - -export default class PgClient { - constructor( - connectionParams, - poolConfig = { max: 10, idleTimeoutMillis: 30000 }, - pgPool = pg.Pool, - pgFormat = pgFormatModule - ) { - this.pgPool = new pgPool({ - user: connectionParams.user, - password: connectionParams.password, - host: connectionParams.host, - port: connectionParams.port, - database: connectionParams.database, - ...poolConfig, - }); - this.format = pgFormat; - } - - async query(query, params = []) { - const client = await this.pgPool.connect(); - try { - return await client.query(query, params); - } finally { - client.release(); - } - } -} diff --git a/indexer-js-queue-handler/provisioner.js b/indexer-js-queue-handler/provisioner.js deleted file mode 100644 index 78704bcf6..000000000 --- a/indexer-js-queue-handler/provisioner.js +++ /dev/null @@ -1,188 +0,0 @@ -import VError from "verror"; -import cryptoModule from "crypto"; - -import HasuraClient from "./hasura-client.js"; -import PgClient from './pg-client.js' - -const DEFAULT_PASSWORD_LENGTH = 16; - -const sharedPgClient = new PgClient({ - user: process.env.PG_ADMIN_USER, - password: process.env.PG_ADMIN_PASSWORD, - database: process.env.PG_ADMIN_DATABASE, - host: process.env.PG_HOST, - port: process.env.PG_PORT, -}); - -export default class Provisioner { - constructor( - hasuraClient = new HasuraClient(), - pgClient = sharedPgClient, - crypto = cryptoModule, - ) { - this.hasuraClient = hasuraClient; - this.pgClient = pgClient; - this.crypto = crypto; - } - - generatePassword(length = DEFAULT_PASSWORD_LENGTH) { - return this.crypto - .randomBytes(length) - .toString('base64') - .slice(0,length) - .replace(/\+/g, '0') - .replace(/\//g, '0'); - } - - async createDatabase(name) { - await this.pgClient.query(this.pgClient.format('CREATE DATABASE %I', name)); - } - - async createUser(name, password) { - await this.pgClient.query(this.pgClient.format(`CREATE USER %I WITH PASSWORD %L`, name, password)) - } - - async restrictUserToDatabase(databaseName, userName) { - await this.pgClient.query(this.pgClient.format('GRANT ALL PRIVILEGES ON DATABASE %I TO %I', databaseName, userName)); - await this.pgClient.query(this.pgClient.format('REVOKE CONNECT ON DATABASE %I FROM PUBLIC', databaseName)); - } - - async createUserDb(userName, password, databaseName) { - try { - await this.createDatabase(databaseName); - await this.createUser(userName, password); - await this.restrictUserToDatabase(databaseName, userName); - } catch (error) { - throw new VError(error, `Failed to create user db`); - } - } - - async isUserApiProvisioned(accountId, functionName) { - const sanitizedAccountId = this.replaceSpecialChars(accountId); - const sanitizedFunctionName = this.replaceSpecialChars(functionName); - - const databaseName = sanitizedAccountId; - const schemaName = `${sanitizedAccountId}_${sanitizedFunctionName}`; - - const sourceExists = await this.hasuraClient.doesSourceExist(databaseName); - if (!sourceExists) { - return false; - } - - const schemaExists = await this.hasuraClient.doesSchemaExist(databaseName, schemaName); - - return schemaExists; - } - - async createSchema(databaseName, schemaName) { - try { - await this.hasuraClient.createSchema(databaseName, schemaName); - } catch (error) { - throw new VError(error, `Failed to create schema`); - } - } - - async runMigrations(databaseName, schemaName, migration) { - try { - await this.hasuraClient.runMigrations(databaseName, schemaName, migration); - } catch (error) { - throw new VError(error, `Failed to run migrations`); - } - } - - async getTableNames(schemaName, databaseName) { - try { - return await this.hasuraClient.getTableNames(schemaName, databaseName); - } catch (error) { - throw new VError(error, `Failed to fetch table names`); - } - } - - async trackTables(schemaName, tableNames, databaseName) { - try { - await this.hasuraClient.trackTables(schemaName, tableNames, databaseName); - } catch (error) { - throw new VError(error, `Failed to track tables`); - } - } - - async addPermissionsToTables(schemaName, databaseName, tableNames, roleName, permissions) { - try { - await this.hasuraClient.addPermissionsToTables( - schemaName, - databaseName, - tableNames, - roleName, - permissions - ); - } catch (error) { - throw new VError(error, `Failed to add permissions to tables`); - } - } - - async trackForeignKeyRelationships(schemaName, databaseName) { - try { - await this.hasuraClient.trackForeignKeyRelationships(schemaName, databaseName); - } catch (error) { - throw new VError(error, `Failed to track foreign key relationships`); - } - } - - async addDatasource(userName, password, databaseName) { - try { - await this.hasuraClient.addDatasource(userName, password, databaseName); - } catch (error) { - throw new VError(error, `Failed to add datasource`); - } - } - - replaceSpecialChars(str) { - return str.replaceAll(/[.-]/g, '_') - } - - async provisionUserApi(accountId, functionName, databaseSchema) { - const sanitizedAccountId = this.replaceSpecialChars(accountId); - const sanitizedFunctionName = this.replaceSpecialChars(functionName); - - const databaseName = sanitizedAccountId; - const userName = sanitizedAccountId; - const schemaName = `${sanitizedAccountId}_${sanitizedFunctionName}`; - - try { - if (!await this.hasuraClient.doesSourceExist(databaseName)) { - const password = this.generatePassword() - await this.createUserDb(userName, password, databaseName); - await this.addDatasource(userName, password, databaseName); - } - - // Untrack tables from old schema to prevent conflicts with new DB - if (await this.hasuraClient.doesSchemaExist(HasuraClient.DEFAULT_DATABASE, schemaName)) { - const tableNames = await this.getTableNames(schemaName, HasuraClient.DEFAULT_DATABASE); - await this.hasuraClient.untrackTables(HasuraClient.DEFAULT_DATABASE, schemaName, tableNames); - } - - await this.createSchema(databaseName, schemaName); - await this.runMigrations(databaseName, schemaName, databaseSchema); - - const tableNames = await this.getTableNames(schemaName, databaseName); - await this.trackTables(schemaName, tableNames, databaseName); - - await this.trackForeignKeyRelationships(schemaName, databaseName); - - await this.addPermissionsToTables(schemaName, databaseName, tableNames, userName, ['select', 'insert', 'update', 'delete']); - } catch (error) { - throw new VError( - { - cause: error, - info: { - schemaName, - userName, - databaseSchema, - databaseName, - } - }, - `Failed to provision endpoint` - ); - } - } -} diff --git a/indexer-js-queue-handler/provisioner.test.js b/indexer-js-queue-handler/provisioner.test.js deleted file mode 100644 index 59c5ed199..000000000 --- a/indexer-js-queue-handler/provisioner.test.js +++ /dev/null @@ -1,215 +0,0 @@ -import { jest } from '@jest/globals'; -import VError from 'verror'; -import pgFormat from 'pg-format'; - -import HasuraClient from './hasura-client'; -import Provisioner from './provisioner'; - -describe('Provisioner', () => { - let pgClient; - let hasuraClient; - - const tableNames = ['blocks']; - const accountId = 'morgs.near'; - const sanitizedAccountId = 'morgs_near'; - const functionName = 'test-function'; - const sanitizedFunctionName = 'test_function'; - const databaseSchema = 'CREATE TABLE blocks (height numeric)'; - const error = new Error('some error'); - const defaultDatabase = 'default'; - const schemaName = `${sanitizedAccountId}_${sanitizedFunctionName}`; - - const password = 'password'; - const crypto = { - randomBytes: () => ({ - toString: () => ({ - slice: () => ({ - replace: () => password, - }), - }), - }), - }; - - beforeEach(() => { - hasuraClient = { - getTableNames: jest.fn().mockReturnValueOnce(tableNames), - trackTables: jest.fn().mockReturnValueOnce(), - trackForeignKeyRelationships: jest.fn().mockReturnValueOnce(), - addPermissionsToTables: jest.fn().mockReturnValueOnce(), - addDatasource: jest.fn().mockReturnValueOnce(), - runMigrations: jest.fn().mockReturnValueOnce(), - createSchema: jest.fn().mockReturnValueOnce(), - doesSourceExist: jest.fn().mockReturnValueOnce(false), - doesSchemaExist: jest.fn().mockReturnValueOnce(false), - untrackTables: jest.fn().mockReturnValueOnce(), - }; - - pgClient = { - query: jest.fn().mockResolvedValue(), - format: pgFormat, - }; - }); - - describe('isUserApiProvisioned', () => { - it('returns false if datasource doesnt exists', async () => { - hasuraClient.doesSourceExist = jest.fn().mockReturnValueOnce(false); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.isUserApiProvisioned(accountId, functionName)).resolves.toBe(false); - }); - - it('returns false if datasource and schema dont exists', async () => { - hasuraClient.doesSourceExist = jest.fn().mockReturnValueOnce(false); - hasuraClient.doesSchemaExist = jest.fn().mockReturnValueOnce(false); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.isUserApiProvisioned(accountId, functionName)).resolves.toBe(false); - }); - - it('returns true if datasource and schema exists', async () => { - hasuraClient.doesSourceExist = jest.fn().mockReturnValueOnce(true); - hasuraClient.doesSchemaExist = jest.fn().mockReturnValueOnce(true); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.isUserApiProvisioned(accountId, functionName)).resolves.toBe(true); - }); - }); - - describe('provisionUserApi', () => { - it('provisions an API for the user', async () => { - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await provisioner.provisionUserApi(accountId, functionName, databaseSchema); - - expect(pgClient.query.mock.calls).toEqual([ - ['CREATE DATABASE morgs_near'], - ['CREATE USER morgs_near WITH PASSWORD \'password\''], - ['GRANT ALL PRIVILEGES ON DATABASE morgs_near TO morgs_near'], - ['REVOKE CONNECT ON DATABASE morgs_near FROM PUBLIC'], - ]); - expect(hasuraClient.addDatasource).toBeCalledWith(sanitizedAccountId, password, sanitizedAccountId); - expect(hasuraClient.createSchema).toBeCalledWith(sanitizedAccountId, schemaName); - expect(hasuraClient.runMigrations).toBeCalledWith(sanitizedAccountId, schemaName, databaseSchema); - expect(hasuraClient.getTableNames).toBeCalledWith(schemaName, sanitizedAccountId); - expect(hasuraClient.trackTables).toBeCalledWith(schemaName, tableNames, sanitizedAccountId); - expect(hasuraClient.addPermissionsToTables).toBeCalledWith( - schemaName, - sanitizedAccountId, - tableNames, - sanitizedAccountId, - [ - 'select', - 'insert', - 'update', - 'delete' - ] - ); - }); - - it('untracks tables from the previous schema if they exists', async () => { - hasuraClient.doesSchemaExist = jest.fn().mockReturnValueOnce(true); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await provisioner.provisionUserApi(accountId, functionName, databaseSchema); - - expect(hasuraClient.getTableNames).toBeCalledWith(schemaName, defaultDatabase) - expect(hasuraClient.untrackTables).toBeCalledWith(defaultDatabase, schemaName, tableNames); - }); - - it('skips provisioning the datasource if it already exists', async () => { - hasuraClient.doesSourceExist = jest.fn().mockReturnValueOnce(true); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await provisioner.provisionUserApi(accountId, functionName, databaseSchema); - - expect(pgClient.query).not.toBeCalled(); - expect(hasuraClient.addDatasource).not.toBeCalled(); - - expect(hasuraClient.createSchema).toBeCalledWith(sanitizedAccountId, schemaName); - expect(hasuraClient.runMigrations).toBeCalledWith(sanitizedAccountId, schemaName, databaseSchema); - expect(hasuraClient.getTableNames).toBeCalledWith(schemaName, sanitizedAccountId); - expect(hasuraClient.trackTables).toBeCalledWith(schemaName, tableNames, sanitizedAccountId); - expect(hasuraClient.addPermissionsToTables).toBeCalledWith( - schemaName, - sanitizedAccountId, - tableNames, - sanitizedAccountId, - [ - 'select', - 'insert', - 'update', - 'delete' - ] - ); - }); - - it('formats user input before executing the query', async () => { - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await provisioner.createUserDb('morgs_near', 'pass; DROP TABLE users;--', 'databaseName UNION SELECT * FROM users --'); - - expect(pgClient.query.mock.calls).toMatchSnapshot(); - }); - - it('throws an error when it fails to create a postgres db', async () => { - pgClient.query = jest.fn().mockRejectedValue(error); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.provisionUserApi(accountId, functionName, databaseSchema)).rejects.toThrow('Failed to provision endpoint: Failed to create user db: some error'); - }); - - it('throws an error when it fails to add the db to hasura', async () => { - hasuraClient.addDatasource = jest.fn().mockRejectedValue(error); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.provisionUserApi(accountId, functionName, databaseSchema)).rejects.toThrow('Failed to provision endpoint: Failed to add datasource: some error'); - }); - - it('throws an error when it fails to run migrations', async () => { - hasuraClient.runMigrations = jest.fn().mockRejectedValue(error); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.provisionUserApi(accountId, functionName, databaseSchema)).rejects.toThrow('Failed to provision endpoint: Failed to run migrations: some error'); - }); - - it('throws an error when it fails to fetch table names', async () => { - hasuraClient.getTableNames = jest.fn().mockRejectedValue(error); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.provisionUserApi(accountId, functionName, databaseSchema)).rejects.toThrow('Failed to provision endpoint: Failed to fetch table names: some error'); - }); - - it('throws an error when it fails to track tables', async () => { - hasuraClient.trackTables = jest.fn().mockRejectedValue(error); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.provisionUserApi(accountId, functionName, databaseSchema)).rejects.toThrow('Failed to provision endpoint: Failed to track tables: some error'); - }); - - it('throws an error when it fails to track foreign key relationships', async () => { - hasuraClient.trackForeignKeyRelationships = jest.fn().mockRejectedValue(error); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.provisionUserApi(accountId, functionName, databaseSchema)).rejects.toThrow('Failed to provision endpoint: Failed to track foreign key relationships: some error'); - }) - - it('throws an error when it fails to add permissions to tables', async () => { - hasuraClient.addPermissionsToTables = jest.fn().mockRejectedValue(error); - - const provisioner = new Provisioner(hasuraClient, pgClient, crypto); - - await expect(provisioner.provisionUserApi(accountId, functionName, databaseSchema)).rejects.toThrow('Failed to provision endpoint: Failed to add permissions to tables: some error'); - }); - }); -}) diff --git a/indexer-js-queue-handler/scripts/migrate-schema-to-db.js b/indexer-js-queue-handler/scripts/migrate-schema-to-db.js deleted file mode 100644 index b4b6a787e..000000000 --- a/indexer-js-queue-handler/scripts/migrate-schema-to-db.js +++ /dev/null @@ -1,94 +0,0 @@ -// export HASURA_ENDPOINT='' -// export HASURA_ADMIN_SECRET='' -// export PG_ADMIN_USER='hasura' -// export PG_ADMIN_PASSWORD='' -// export PG_ADMIN_DATABASE='postgres' -// export PG_HOST='104.199.4.194' -// export PG_PORT=5432 -// export CHAIN_ID='mainnet' -// export ENV='dev' - -import { execSync } from 'child_process' -import { providers } from 'near-api-js' - -import Provisioner from '../provisioner.js' -import HasuraClient from '../hasura-client.js' - -const provisioner = new Provisioner(); - -if (!process.argv[2]) { - console.error('Please pass the account ID as the first argument, e.g. dataplatform.near'); - process.exit(1); -} - -if (!process.argv[3]) { - console.error('Please pass the function name as the second argument, e.g. social_feed') - process.exit(1); -} - -const [_, __, accountId, functionName] = process.argv; - -console.log(`Processing account: ${accountId}, function: ${functionName}`); - -const provider = new providers.JsonRpcProvider( - `https://rpc.${process.env.CHAIN_ID}.near.org` -); - -console.log('Fetching existing schema'); -const { result: rawResult } = await provider.query({ - request_type: 'call_function', - account_id: `${process.env.ENV === 'prod' ? '' : 'dev-'}queryapi.dataplatform.near`, - method_name: 'list_indexer_functions', - args_base64: Buffer.from(JSON.stringify({ account_id: accountId})).toString('base64'), - finality: 'optimistic', -}); - -const result = JSON.parse(Buffer.from(rawResult).toString()); - -const { schema: databaseSchema } = result.Account[functionName]; -console.log('Using schema: ', databaseSchema); - -const sanitizedAccountId = provisioner.replaceSpecialChars(accountId); -const sanitizedFunctionName = provisioner.replaceSpecialChars(functionName); - -const databaseName = sanitizedAccountId; -const userName = sanitizedAccountId; -const schemaName = `${sanitizedAccountId}_${sanitizedFunctionName}`; - -const password = provisioner.generatePassword() -if (!await provisioner.hasuraClient.doesSourceExist(databaseName)) { - console.log(`Creating user: ${userName} and database: ${databaseName} with password: ${password}`); - await provisioner.createUserDb(userName, password, databaseName); - console.log('Adding datasource to Hasura') - await provisioner.addDatasource(userName, password, databaseName); -} - -const tableNames = await provisioner.getTableNames(schemaName, HasuraClient.DEFAULT_DATABASE); - -console.log('Untracking existing tables') -await provisioner.hasuraClient.untrackTables(HasuraClient.DEFAULT_DATABASE, schemaName, tableNames); - -console.log(`Restoring existing schema ${schemaName} in new DB ${databaseName}`); -await provisioner.createSchema(databaseName, schemaName); -await provisioner.runMigrations(databaseName, schemaName, databaseSchema); - -console.log('Dumping existing data'); -execSync( - `pg_dump ${`postgres://${process.env.PG_ADMIN_USER}:${process.env.PG_ADMIN_PASSWORD}@${process.env.PG_HOST}:${process.env.PG_PORT}/${process.env.PG_ADMIN_DATABASE}`} --data-only --schema=${schemaName} --file="${schemaName}.sql"` -); - -console.log(`Restoring data to schema ${schemaName} in DB ${databaseName}`); -execSync( - `psql ${`postgres://${userName}:${password}@${process.env.PG_HOST}:${process.env.PG_PORT}/${databaseName}`} < "${schemaName}.sql"` -); - -console.log('Tracking tables'); -await provisioner.trackTables(schemaName, tableNames, databaseName); - -console.log('Tracking foreign key relationships'); -await provisioner.trackForeignKeyRelationships(schemaName, databaseName); - -console.log('Adding permissions to tables'); -await provisioner.addPermissionsToTables(schemaName, databaseName, tableNames, userName, ['select', 'insert', 'update', 'delete']); - -console.log('done') diff --git a/indexer-js-queue-handler/scripts/provision-user-dbs.js b/indexer-js-queue-handler/scripts/provision-user-dbs.js deleted file mode 100644 index a9921ad1a..000000000 --- a/indexer-js-queue-handler/scripts/provision-user-dbs.js +++ /dev/null @@ -1,54 +0,0 @@ -// export HASURA_ENDPOINT='' -// export HASURA_ADMIN_SECRET='' -// export PG_ADMIN_USER='' -// export PG_ADMIN_PASSWORD='' -// export PG_ADMIN_DATABASE='' -// export PG_HOST='' -// export PG_PORT= - -import { execSync } from 'child_process' -import { providers } from 'near-api-js' - -import Provisioner from '../provisioner.js' -import HasuraClient from '../hasura-client.js' - -const provisioner = new Provisioner(); - -const { rows } = await provisioner.pgClient.query('SELECT nspname AS name FROM pg_namespace;') - -const schemaNames = rows.map((row) => row.name); - -const accountIdsSet = schemaNames.reduce((accountIdsSet, schemaName) => { - const parts = schemaName.split('_near_'); - if (parts.length > 1) { - accountIdsSet.add(`${parts[0]}_near`); - } - return accountIdsSet; -}, new Set()); - -const accountIds = Array.from(accountIdsSet); - -console.log(`Creating datasources for accounts: ${accountIds.join(', ')}`) - -for (const accountId of accountIds) { - console.log('---'); - const sanitizedAccountId = provisioner.replaceSpecialChars(accountId); - - const databaseName = sanitizedAccountId; - const userName = sanitizedAccountId; - - if (await provisioner.hasuraClient.doesSourceExist(databaseName)) { - console.log(`Datasource ${databaseName} already exists, skipping.`) - continue; - } - - const password = provisioner.generatePassword() - console.log(`Creating user: ${userName} and database: ${databaseName} with password: ${password}`); - await provisioner.createUserDb(userName, password, databaseName); - - console.log(`Adding datasource ${databaseName} to Hasura`) - await provisioner.addDatasource(userName, password, databaseName); -} -console.log('---'); - -console.log('Done'); diff --git a/indexer-js-queue-handler/serverless.yml b/indexer-js-queue-handler/serverless.yml deleted file mode 100644 index ac4710bb6..000000000 --- a/indexer-js-queue-handler/serverless.yml +++ /dev/null @@ -1,57 +0,0 @@ -#org: pagoda -#app: queryapi -service: queryapi -frameworkVersion: '3' - -provider: - name: aws - runtime: nodejs16.x - region: eu-central-1 - timeout: 120 - environment: - REGION: ${self:provider.region} - STAGE: ${opt:stage, 'dev'} - HASURA_ENDPOINT: ${env:HASURA_ENDPOINT} - HASURA_ENDPOINT_V2: ${env:HASURA_ENDPOINT_V2} - HASURA_ADMIN_SECRET: ${env:HASURA_ADMIN_SECRET} - PG_ADMIN_USER: ${env:PG_ADMIN_USER} - PG_ADMIN_PASSWORD: ${env:PG_ADMIN_PASSWORD} - PG_ADMIN_DATABASE: ${env:PG_ADMIN_DATABASE} - PG_HOST: ${env:PG_HOST} - PG_PORT: ${env:PG_PORT} - tracing: - lambda: true #enable X-Ray tracing - iamRoleStatements: - - Effect: "Allow" - Action: - - "cloudwatch:PutMetricData" - Resource: "*" -# cfnRole: arn:aws:iam::754641474505:role/queryapi-cloudformation - -# See https://github.com/getlift/lift/blob/master/docs/queue.md for configuration of SQS constructs -constructs: - indexer-runner: - type: queue - fifo: true - maxRetries: 1 - worker: - handler: handler.consumer - timeout: 120 # 12 minutes as lift multiplies this value by 6 (https://github.com/getlift/lift/blob/master/docs/queue.md#retry-delay) - startFromBlock-runner: - type: queue - fifo: true - maxRetries: 1 - # batchSize: 100 - worker: - handler: handler.consumer - timeout: 120 # 12 minutes as lift multiplies this value by 6 (https://github.com/getlift/lift/blob/master/docs/queue.md#retry-delay) - -functions: - socialLagMetricsWriter: - handler: social-lag-metrics-writer.handler - events: - - schedule: rate(1 minute) - -plugins: - - serverless-lift -# - serverless-offline diff --git a/indexer-js-queue-handler/social-lag-metrics-writer.js b/indexer-js-queue-handler/social-lag-metrics-writer.js deleted file mode 100644 index b3ebe220d..000000000 --- a/indexer-js-queue-handler/social-lag-metrics-writer.js +++ /dev/null @@ -1,62 +0,0 @@ -import fetch from "node-fetch"; -import AWS from "aws-sdk"; - -import Metrics from "./metrics.js"; - -const fetchJson = async (url, requestBody, requestHeaders) => { - const response = await fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - ...requestHeaders, - }, - body: JSON.stringify(requestBody), - }); - - const responseBody = await response.json(); - - if (response.status !== 200 || responseBody.errors) { - throw new Error(JSON.stringify(responseBody)); - } - - return responseBody; -}; - -export const handler = async () => { - const metrics = new Metrics("QueryAPI"); - - const [nearSocialResponse, feedIndexerResponse] = await Promise.all([ - fetchJson(`https://api.near.social/index`, { - action: "post", - key: "main", - options: { - limit: 1, - order: "desc", - }, - }), - fetchJson( - `${process.env.HASURA_ENDPOINT_V2}/v1/graphql`, - { - query: `{ - dataplatform_near_social_feed_posts( - limit: 1, - order_by: { block_height: desc } - ) { - block_height - } - }`, - }, - { - ["X-Hasura-Role"]: "dataplatform_near", - } - ), - ]); - - const nearSocialBlockHeight = nearSocialResponse[0].blockHeight; - const feedIndexerBlockHeight = - feedIndexerResponse.data.dataplatform_near_social_feed_posts[0].block_height; - - const lag = nearSocialBlockHeight - feedIndexerBlockHeight; - - await metrics.putCustomMetric("dataplatform.near", "social_feed", false, 'SOCIAL_LAG', lag); -}; diff --git a/indexer-js-queue-handler/test_payload.json b/indexer-js-queue-handler/test_payload.json deleted file mode 100644 index 7fee5dd3b..000000000 --- a/indexer-js-queue-handler/test_payload.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Records": [ - { - "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", - "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", - "body": "{\"triggered_alert_id\":9,\"destination_config\":{\"Aggregation\":{\"destination_id\":1,\"indexer_name\":\"posts_likes\",\"indexer_function_code\":\"for(let p in block.getPosts)) {\\n context.save(a);\\n]\"}},\"alert_message\":{\"chain_id\":\"Mainnet\",\"alert_rule_id\":2,\"alert_name\":\"Function set called in social.near\",\"payload\":{\"Actions\":{\"block_hash\":\"BF78K1ywApepy9MhdmJAoUzGJXK39fPKvuVeMGexBnBo\",\"receipt_id\":\"7CQFJNB7xiJ3698tHRB7qf8vjtYAevpuH56AYyb7iZJS\",\"transaction_hash\":\"B33KtoiKchh7P4Vu96DU1SsM59UuiMLjqh3C4zRHdjYG\"}},\"block_height\":84331720}}", - "attributes": { - "ApproximateReceiveCount": "1", - "SentTimestamp": "1545082649183", - "SenderId": "AIDAIENQZJOLO23YVJ4VO", - "ApproximateFirstReceiveTimestamp": "1545082649185" - }, - "messageAttributes": {}, - "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", - "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", - "awsRegion": "us-east-2" - } - ] -} diff --git a/indexer-js-queue-handler/trace-fetch.js b/indexer-js-queue-handler/trace-fetch.js deleted file mode 100644 index c2b69435b..000000000 --- a/indexer-js-queue-handler/trace-fetch.js +++ /dev/null @@ -1,73 +0,0 @@ -import AWSXRay from "aws-xray-sdk"; - -// Adapted from https://github.com/aws/aws-xray-sdk-node/issues/531#issuecomment-1378562164 -// which is adapted from https://github.com/aws/aws-xray-sdk-node code that is Apache 2.0 licensed - export default function traceFetch(actualFetch) { - return async function (resource, options) { - const traceHeader = - resource.headers?.get('X-Amzn-Trace-Id') ?? options?.['X-Amzn-Trace-Id'] - - if (!traceHeader) { - const parent = AWSXRay.resolveSegment() - - if (parent) { - const url = resource?.url ?? resource - const method = resource?.method ?? options?.method ?? 'GET' - const { hostname } = new URL(url) - const subsegment = parent.notTraced - ? parent.addNewSubsegmentWithoutSampling(hostname) - : parent.addNewSubsegment(hostname) - const root = parent.segment ? parent.segment : parent - subsegment.namespace = 'remote' - - if (!options) { - options = {} - } - - if (!options.headers) { - options.headers = {} - } - - options.headers['X-Amzn-Trace-Id'] = - 'Root=' + - root.trace_id + - ';Parent=' + - subsegment.id + - ';Sampled=' + - (subsegment.notTraced ? '0' : '1') - - subsegment.http = { - request: { - url, - method - } - } - - try { - const res = await actualFetch.call(globalThis, resource, options) - if (res.status === 429) { - subsegment.addThrottleFlag() - } else if (!res.ok) { - subsegment.addErrorFlag() - } - const cause = AWSXRay.utils.getCauseTypeFromHttpStatus(res.status) - if (cause) { - subsegment[cause] = true - } - const contentLength = res.headers.get('content-length') - subsegment.http.response = { - status: res.status, - ...(contentLength && { content_length: contentLength }) - } - subsegment.close() - return res - } catch (err) { - subsegment.close(err) - throw err - } - } - } - - return await actualFetch.call(globalThis, resource, options) - } -} diff --git a/indexer/.dockerignore b/indexer/.dockerignore deleted file mode 100644 index 3b2ddf1fd..000000000 --- a/indexer/.dockerignore +++ /dev/null @@ -1,13 +0,0 @@ -.dockerignore -docker-compose.yml -Dockerfile - -target -*/target - -render.yaml -queue-handler/ -*-queue-handler/ -tx-alertexer/ -.github/ -docs/ diff --git a/indexer/Cargo.lock b/indexer/Cargo.lock deleted file mode 100644 index f1bad0866..000000000 --- a/indexer/Cargo.lock +++ /dev/null @@ -1,4503 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "actix" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f728064aca1c318585bf4bb04ffcfac9e75e508ab4e8b1bd9ba5dfe04e2cbed5" -dependencies = [ - "actix-rt", - "actix_derive", - "bitflags", - "bytes", - "crossbeam-channel", - "futures-core", - "futures-sink", - "futures-task", - "futures-util", - "log", - "once_cell", - "parking_lot", - "pin-project-lite", - "smallvec", - "tokio", - "tokio-util 0.7.3", -] - -[[package]] -name = "actix-codec" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-sink", - "log", - "memchr", - "pin-project-lite", - "tokio", - "tokio-util 0.7.3", -] - -[[package]] -name = "actix-http" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0070905b2c4a98d184c4e81025253cb192aa8a73827553f38e9410801ceb35bb" -dependencies = [ - "actix-codec", - "actix-rt", - "actix-service", - "actix-utils", - "ahash 0.7.6", - "base64 0.21.0", - "bitflags", - "brotli", - "bytes", - "bytestring", - "derive_more", - "encoding_rs", - "flate2", - "futures-core", - "h2", - "http", - "httparse", - "httpdate", - "itoa", - "language-tags", - "local-channel", - "mime", - "percent-encoding", - "pin-project-lite", - "rand 0.8.5", - "sha1 0.10.5", - "smallvec", - "tokio", - "tokio-util 0.7.3", - "tracing", - "zstd", -] - -[[package]] -name = "actix-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "actix-router" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799" -dependencies = [ - "bytestring", - "http", - "regex", - "serde", - "tracing", -] - -[[package]] -name = "actix-rt" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" -dependencies = [ - "futures-core", - "tokio", -] - -[[package]] -name = "actix-server" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327" -dependencies = [ - "actix-rt", - "actix-service", - "actix-utils", - "futures-core", - "futures-util", - "mio", - "num_cpus", - "socket2", - "tokio", - "tracing", -] - -[[package]] -name = "actix-service" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" -dependencies = [ - "futures-core", - "paste", - "pin-project-lite", -] - -[[package]] -name = "actix-utils" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" -dependencies = [ - "local-waker", - "pin-project-lite", -] - -[[package]] -name = "actix-web" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e5ebffd51d50df56a3ae0de0e59487340ca456f05dd0b90c0a7a6dd6a74d31" -dependencies = [ - "actix-codec", - "actix-http", - "actix-macros", - "actix-router", - "actix-rt", - "actix-server", - "actix-service", - "actix-utils", - "actix-web-codegen", - "ahash 0.7.6", - "bytes", - "bytestring", - "cfg-if", - "cookie", - "derive_more", - "encoding_rs", - "futures-core", - "futures-util", - "itoa", - "language-tags", - "log", - "mime", - "once_cell", - "pin-project-lite", - "regex", - "serde", - "serde_json", - "serde_urlencoded", - "smallvec", - "socket2", - "time 0.3.20", - "url", -] - -[[package]] -name = "actix-web-codegen" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9" -dependencies = [ - "actix-router", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "actix_derive" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d44b8fee1ced9671ba043476deddef739dd0959bf77030b26b738cc591737a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.9", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anyhow" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" - -[[package]] -name = "arbitrary" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "arc-swap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" - -[[package]] -name = "async-mutex" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "async-trait" -version = "0.1.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "aws-config" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "741327a7f70e6e639bdb5061964c66250460c70ad3f59c3fe2a3a64ac1484e33" -dependencies = [ - "aws-credential-types", - "aws-http", - "aws-sdk-sso", - "aws-sdk-sts", - "aws-smithy-async", - "aws-smithy-client", - "aws-smithy-http", - "aws-smithy-http-tower", - "aws-smithy-json", - "aws-smithy-types", - "aws-types", - "bytes", - "hex", - "http", - "hyper", - "ring", - "time 0.3.20", - "tokio", - "tower", - "tracing", - "zeroize", -] - -[[package]] -name = "aws-credential-types" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f99dd587a46af58f8cf37773687ecec19d0373a5954942d7e0f405751fe2369" -dependencies = [ - "aws-smithy-async", - "aws-smithy-types", - "tokio", - "tracing", - "zeroize", -] - -[[package]] -name = "aws-endpoint" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13fdfc00c57d95e10bcf83d2331c4ae9ca460ca84dc983b2cdd692de87640389" -dependencies = [ - "aws-smithy-http", - "aws-smithy-types", - "aws-types", - "http", - "regex", - "tracing", -] - -[[package]] -name = "aws-http" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74cdac70481d144bf7001c27884b95ee12c8f62e61db90320d59b673ae121cb8" -dependencies = [ - "aws-credential-types", - "aws-smithy-http", - "aws-smithy-types", - "aws-types", - "bytes", - "http", - "http-body", - "lazy_static", - "percent-encoding", - "pin-project-lite", - "tracing", -] - -[[package]] -name = "aws-sdk-s3" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ae411cb03ea6df0d4c4340a0d3c15cab7b19715d091f76c5629f31acd6403f3" -dependencies = [ - "aws-credential-types", - "aws-endpoint", - "aws-http", - "aws-sig-auth", - "aws-sigv4", - "aws-smithy-async", - "aws-smithy-checksums", - "aws-smithy-client", - "aws-smithy-eventstream", - "aws-smithy-http", - "aws-smithy-http-tower", - "aws-smithy-json", - "aws-smithy-types", - "aws-smithy-xml", - "aws-types", - "bytes", - "bytes-utils", - "fastrand", - "http", - "http-body", - "once_cell", - "percent-encoding", - "regex", - "tokio-stream", - "tower", - "tracing", - "url", -] - -[[package]] -name = "aws-sdk-sso" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d2fb56182ac693a19364cc0bde22d95aef9be3663bf9b906ffbd0ab0a7c7d1" -dependencies = [ - "aws-credential-types", - "aws-endpoint", - "aws-http", - "aws-sig-auth", - "aws-smithy-async", - "aws-smithy-client", - "aws-smithy-http", - "aws-smithy-http-tower", - "aws-smithy-json", - "aws-smithy-types", - "aws-types", - "bytes", - "http", - "regex", - "tokio-stream", - "tower", - "url", -] - -[[package]] -name = "aws-sdk-sts" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a70adf3e9518c8d6d14f1239f6af04c019ffd260ab791e17deb11f1bce6a9f76" -dependencies = [ - "aws-credential-types", - "aws-endpoint", - "aws-http", - "aws-sig-auth", - "aws-smithy-async", - "aws-smithy-client", - "aws-smithy-http", - "aws-smithy-http-tower", - "aws-smithy-json", - "aws-smithy-query", - "aws-smithy-types", - "aws-smithy-xml", - "aws-types", - "bytes", - "http", - "regex", - "tower", - "tracing", - "url", -] - -[[package]] -name = "aws-sig-auth" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22af7f6515f8b51dabef87df1d901c9734e4e367791c6d0e1082f9f31528120e" -dependencies = [ - "aws-credential-types", - "aws-sigv4", - "aws-smithy-eventstream", - "aws-smithy-http", - "aws-types", - "http", - "tracing", -] - -[[package]] -name = "aws-sigv4" -version = "0.53.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14500f741fb73a3c6cb173f8d96b433319a0e27c370a4e783b9ad693fc86210e" -dependencies = [ - "aws-smithy-eventstream", - "aws-smithy-http", - "bytes", - "form_urlencoded", - "hex", - "hmac", - "http", - "once_cell", - "percent-encoding", - "regex", - "sha2 0.10.6", - "time 0.3.20", - "tracing", -] - -[[package]] -name = "aws-smithy-async" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b9900be224962d65a626072d8777f847ae5406c07547f0dc14c60048978c4b" -dependencies = [ - "futures-util", - "pin-project-lite", - "tokio", - "tokio-stream", -] - -[[package]] -name = "aws-smithy-checksums" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e9e4d3c2296bcec2c03f9f769ac9b2424d972c2fe7afc0b59235447ac3a5c3" -dependencies = [ - "aws-smithy-http", - "aws-smithy-types", - "bytes", - "crc32c", - "crc32fast", - "hex", - "http", - "http-body", - "md-5", - "pin-project-lite", - "sha1 0.10.5", - "sha2 0.10.6", - "tracing", -] - -[[package]] -name = "aws-smithy-client" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "710ca0f8dacddda5fbcaf5c3cd9d02da7913fd463a2ee9555b617bf168bedacb" -dependencies = [ - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-http-tower", - "aws-smithy-types", - "bytes", - "fastrand", - "http", - "http-body", - "hyper", - "hyper-rustls", - "lazy_static", - "pin-project-lite", - "tokio", - "tower", - "tracing", -] - -[[package]] -name = "aws-smithy-eventstream" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d1ff11ee22de3581114b60d4ae8e700638dacb5b5bbe6769726e251e6c3f20a" -dependencies = [ - "aws-smithy-types", - "bytes", - "crc32fast", -] - -[[package]] -name = "aws-smithy-http" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29dcab29afbea7726f5c10c7be0c38666d7eb07db551580b3b26ed7cfb5d1935" -dependencies = [ - "aws-smithy-eventstream", - "aws-smithy-types", - "bytes", - "bytes-utils", - "futures-core", - "http", - "http-body", - "hyper", - "once_cell", - "percent-encoding", - "pin-project-lite", - "pin-utils", - "tokio", - "tokio-util 0.7.3", - "tracing", -] - -[[package]] -name = "aws-smithy-http-tower" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5856d2f1063c0f726a85f32dcd2a9f5a1d994eb27b156abccafc7260f3f471d" -dependencies = [ - "aws-smithy-http", - "aws-smithy-types", - "bytes", - "http", - "http-body", - "pin-project-lite", - "tower", - "tracing", -] - -[[package]] -name = "aws-smithy-json" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb33659b68480495b5f906b946c8642928440118b1d7e26a25a067303ca01a5" -dependencies = [ - "aws-smithy-types", -] - -[[package]] -name = "aws-smithy-query" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c4b21ee0e30ff046e87c7b7e017b99d445b42a81fe52c6e5139b23b795a98ae" -dependencies = [ - "aws-smithy-types", - "urlencoding", -] - -[[package]] -name = "aws-smithy-types" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2013465a070decdeb3e85ceb3370ae85ba05f56f914abfd89858d7281c4f12c3" -dependencies = [ - "base64-simd", - "itoa", - "num-integer", - "ryu", - "time 0.3.20", -] - -[[package]] -name = "aws-smithy-xml" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d27bfaa164aa94aac721726a83aa78abe708a275e88a573e103b4961c5f0ede" -dependencies = [ - "xmlparser", -] - -[[package]] -name = "aws-types" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f00f4b0cdd345686e6389f3343a3020f93232d20040802b87673ddc2d02956" -dependencies = [ - "aws-credential-types", - "aws-smithy-async", - "aws-smithy-client", - "aws-smithy-http", - "aws-smithy-types", - "http", - "rustc_version", - "tracing", -] - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "base64-simd" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" -dependencies = [ - "simd-abstraction", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "blake2" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" -dependencies = [ - "crypto-mac", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "borsh" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" -dependencies = [ - "borsh-derive", - "hashbrown 0.13.2", -] - -[[package]] -name = "borsh-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" -dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", - "proc-macro-crate", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "borsh-derive-internal" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - -[[package]] -name = "bumpalo" -version = "3.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" - -[[package]] -name = "bytes-utils" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9" -dependencies = [ - "bytes", - "either", -] - -[[package]] -name = "bytesize" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5" -dependencies = [ - "serde", -] - -[[package]] -name = "bytestring" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae" -dependencies = [ - "bytes", -] - -[[package]] -name = "c2-chacha" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80" -dependencies = [ - "cipher", - "ppv-lite86", -] - -[[package]] -name = "cached" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e2afe73808fbaac302e39c9754bfc3c4b4d0f99c9c240b9f4e4efc841ad1b74" -dependencies = [ - "async-mutex", - "async-trait", - "cached_proc_macro", - "cached_proc_macro_types", - "futures", - "hashbrown 0.9.1", - "once_cell", -] - -[[package]] -name = "cached_proc_macro" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4230b8d9f5db741004bfaef172c5b2dbf0eb94f105204cc6147a220080daaa85" -dependencies = [ - "cached_proc_macro_types", - "darling 0.13.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cached_proc_macro_types" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "time 0.1.45", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array", -] - -[[package]] -name = "clap" -version = "3.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" -dependencies = [ - "atty", - "bitflags", - "clap_derive", - "clap_lex", - "indexmap", - "once_cell", - "strsim", - "termcolor", - "textwrap", -] - -[[package]] -name = "clap_derive" -version = "3.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" -dependencies = [ - "heck 0.4.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "combine" -version = "4.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", - "tokio-util 0.7.3", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "cookie" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" -dependencies = [ - "percent-encoding", - "time 0.3.20", - "version_check", -] - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "cpufeatures" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32c" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfea2db42e9927a3845fb268a10a72faed6d416065f77873f05e411457c363e" -dependencies = [ - "rustc_version", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "cxx" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.15", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] - -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core 0.13.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_arbitrary" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder_macro" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" -dependencies = [ - "derive_builder_core", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "difference" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer 0.10.4", - "crypto-common", - "subtle", -] - -[[package]] -name = "dotenv" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" - -[[package]] -name = "downcast" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb454f0228b18c7f4c3b0ebbee346ed9c52e7443b0999cd543ff3571205701d" - -[[package]] -name = "easy-ext" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53aff6fdc1b181225acdcb5b14c47106726fd8e486707315b1b138baed68ee31" - -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum-map" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "988f0d17a0fa38291e5f41f71ea8d46a5d5497b9054d5a759fae2cbb819f2356" -dependencies = [ - "enum-map-derive", -] - -[[package]] -name = "enum-map-derive" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4da76b3b6116d758c7ba93f7ec6a35d2e2cf24feda76c6e38a375f4d5c59f2" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fixed-hash" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" -dependencies = [ - "static_assertions", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "float-cmp" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4" -dependencies = [ - "num-traits", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fragile" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7464c5c4a3f014d9b2ec4073650e5c06596f385060af740fc45ad5a19f959e8" -dependencies = [ - "fragile 2.0.0", -] - -[[package]] -name = "fragile" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "futures" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "h2" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util 0.7.3", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash 0.8.3", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" -dependencies = [ - "http", - "hyper", - "log", - "rustls", - "rustls-native-certs", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexer_rule_type" -version = "0.1.0" -dependencies = [ - "borsh", - "serde", -] - -[[package]] -name = "indexer_rules_engine" -version = "0.1.0" -dependencies = [ - "anyhow", - "borsh", - "futures", - "indexer_rule_type", - "near-lake-framework", - "serde", - "serde_json", - "tokio", - "wildmatch", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "itertools" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "jobserver" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json_comments" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ee439ee368ba4a77ac70d04f14015415af8600d6c894dc1f11bd79758c57d5" - -[[package]] -name = "language-tags" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.142" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" - -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linux-raw-sys" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" - -[[package]] -name = "local-channel" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" -dependencies = [ - "futures-core", - "futures-sink", - "futures-util", - "local-waker", -] - -[[package]] -name = "local-waker" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "matchers" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "mockall" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d614ad23f9bb59119b8b5670a85c7ba92c5e9adf4385c81ea00c51c8be33d5" -dependencies = [ - "cfg-if", - "downcast", - "fragile 1.2.2", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", -] - -[[package]] -name = "mockall_derive" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd4234635bca06fc96c7368d038061e0aae1b00a764dc817e900dc974e3deea" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "near-account-id" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12791d0f273e04609010d68deb6e1cd940659ad420edfa2e48238117154f1d5b" -dependencies = [ - "arbitrary", - "borsh", - "serde", -] - -[[package]] -name = "near-chain-configs" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84781ba3321e28640c5f0453d4d84305135db6edc399c51b7ee405ebb9381eaa" -dependencies = [ - "anyhow", - "chrono", - "derive_more", - "near-config-utils", - "near-crypto", - "near-o11y", - "near-primitives", - "num-rational", - "once_cell", - "serde", - "serde_json", - "sha2 0.10.6", - "smart-default", - "tracing", -] - -[[package]] -name = "near-config-utils" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "137b6bbd477dc0ff1149e22c5e1f3f168a1f37d9d67f1519f058a5db81df3506" -dependencies = [ - "anyhow", - "json_comments", - "thiserror", - "tracing", -] - -[[package]] -name = "near-crypto" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659a96750c4d933e4f00a50c66ba9948a32b862e5ecd6a952beee881b1cd2aaf" -dependencies = [ - "blake2", - "borsh", - "bs58", - "c2-chacha", - "curve25519-dalek", - "derive_more", - "ed25519-dalek", - "hex", - "near-account-id", - "near-config-utils", - "near-stdx", - "once_cell", - "primitive-types", - "rand 0.7.3", - "secp256k1", - "serde", - "serde_json", - "subtle", - "thiserror", -] - -[[package]] -name = "near-indexer-primitives" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d10699cd998980a8965ee0d1922a77585b7ed1031934de29fb982ef4ae6ad2" -dependencies = [ - "near-primitives", - "serde", - "serde_json", -] - -[[package]] -name = "near-jsonrpc-client" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bf020bd5fb7952c8f005ab789ac6f7a2015557630571362bcbaf2ead27c5cb6" -dependencies = [ - "borsh", - "lazy_static", - "log", - "near-chain-configs", - "near-crypto", - "near-jsonrpc-primitives", - "near-primitives", - "reqwest", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "near-jsonrpc-primitives" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0968cc71825e020d75f5a1f3577ac0379859ec7b14351ed5754fef1cc89e0d7" -dependencies = [ - "arbitrary", - "near-chain-configs", - "near-crypto", - "near-primitives", - "near-rpc-error-macro", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "near-lake-framework" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b733c11d21cb97f66721ebea525c1fd4fb6fdd4aeab5c7c9562363230f071e" -dependencies = [ - "anyhow", - "async-stream", - "async-trait", - "aws-config", - "aws-credential-types", - "aws-sdk-s3", - "aws-types", - "derive_builder", - "futures", - "near-indexer-primitives", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "near-o11y" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445cbd86499dbabf68d34d95d9a45c680da5446e226f4982ce488fcf8556b23f" -dependencies = [ - "actix", - "atty", - "clap", - "near-crypto", - "near-primitives-core", - "once_cell", - "opentelemetry", - "opentelemetry-otlp", - "opentelemetry-semantic-conventions", - "prometheus", - "serde", - "strum", - "thiserror", - "tokio", - "tracing", - "tracing-appender", - "tracing-opentelemetry", - "tracing-subscriber 0.3.17", -] - -[[package]] -name = "near-primitives" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4c030f28e8f988698145e7753b83bb54c05838c3afdd44835cc7c32c327ea1e" -dependencies = [ - "arbitrary", - "borsh", - "bytesize", - "cfg-if", - "chrono", - "derive_more", - "easy-ext", - "enum-map", - "hex", - "near-crypto", - "near-o11y", - "near-primitives-core", - "near-rpc-error-macro", - "near-stdx", - "near-vm-errors", - "num-rational", - "once_cell", - "primitive-types", - "rand 0.8.5", - "reed-solomon-erasure", - "serde", - "serde_json", - "serde_yaml", - "smart-default", - "strum", - "thiserror", - "time 0.3.20", - "tokio", - "tracing", -] - -[[package]] -name = "near-primitives-core" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe2059d16efc42ef7f9514f30910d32b67c01fee9b70c1fd28d50545ca145d88" -dependencies = [ - "arbitrary", - "base64 0.13.1", - "borsh", - "bs58", - "derive_more", - "enum-map", - "near-account-id", - "num-rational", - "serde", - "serde_repr", - "sha2 0.10.6", - "strum", - "thiserror", -] - -[[package]] -name = "near-rpc-error-core" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28f8f38dcfeba3d0d3bc60ce292ddb1f76a428a590e32de7fc3d5d431b9635ea" -dependencies = [ - "quote", - "serde", - "syn 1.0.109", -] - -[[package]] -name = "near-rpc-error-macro" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca4e8d6887b344f3e2f8281c1ad2cc93dcbcb683b546726a4ce1ab1dfa623a" -dependencies = [ - "fs2", - "near-rpc-error-core", - "serde", - "syn 1.0.109", -] - -[[package]] -name = "near-stdx" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc1279be274b9a49c2cb4b62541241a1ff6745cb77ca81ece7f949cfbc229bff" - -[[package]] -name = "near-vm-errors" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2d3eab1e050fdc3e036c803784cf45582661ae2dd07bac3bd373ba9c049715" -dependencies = [ - "borsh", - "near-account-id", - "near-rpc-error-macro", - "serde", - "strum", - "thiserror", -] - -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", - "serde", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "openssl" -version = "0.10.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "opentelemetry" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures-channel", - "futures-executor", - "futures-util", - "js-sys", - "lazy_static", - "percent-encoding", - "pin-project", - "rand 0.8.5", - "thiserror", - "tokio", - "tokio-stream", -] - -[[package]] -name = "opentelemetry-otlp" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a" -dependencies = [ - "async-trait", - "futures", - "futures-util", - "http", - "opentelemetry", - "prost", - "thiserror", - "tokio", - "tonic", - "tonic-build", -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985cc35d832d412224b2cffe2f9194b1b89b6aa5d0bef76d080dce09d90e62bd" -dependencies = [ - "opentelemetry", -] - -[[package]] -name = "os_str_bytes" -version = "6.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" - -[[package]] -name = "outref" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "paste" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "petgraph" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "predicates" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df" -dependencies = [ - "difference", - "float-cmp", - "normalize-line-endings", - "predicates-core", - "regex", -] - -[[package]] -name = "predicates-core" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" - -[[package]] -name = "predicates-tree" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" -dependencies = [ - "predicates-core", - "termtree", -] - -[[package]] -name = "primitive-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" -dependencies = [ - "fixed-hash", - "uint", -] - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prometheus" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf", - "thiserror", -] - -[[package]] -name = "prost" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" -dependencies = [ - "bytes", - "heck 0.3.3", - "itertools 0.10.5", - "lazy_static", - "log", - "multimap", - "petgraph", - "prost", - "prost-types", - "regex", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" -dependencies = [ - "anyhow", - "itertools 0.10.5", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "prost-types" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" -dependencies = [ - "bytes", - "prost", -] - -[[package]] -name = "protobuf" -version = "2.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" - -[[package]] -name = "queryapi_coordinator" -version = "0.1.0" -dependencies = [ - "actix-web", - "anyhow", - "aws-config", - "aws-credential-types", - "aws-sdk-s3", - "aws-types", - "base64 0.13.1", - "borsh", - "cached", - "chrono", - "clap", - "dotenv", - "futures", - "indexer_rule_type", - "indexer_rules_engine", - "itertools 0.9.0", - "lazy_static", - "mockall", - "near-jsonrpc-client", - "near-jsonrpc-primitives", - "near-lake-framework", - "prometheus", - "regex", - "serde", - "serde_json", - "storage", - "tokio", - "tokio-stream", - "tokio-util 0.6.10", - "tracing", - "tracing-subscriber 0.2.25", - "unescape", -] - -[[package]] -name = "quote" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "redis" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "152f3863635cbb76b73bc247845781098302c6c9ad2060e1a9a7de56840346b6" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "combine", - "futures", - "futures-util", - "itoa", - "percent-encoding", - "pin-project-lite", - "ryu", - "sha1 0.6.1", - "tokio", - "tokio-util 0.7.3", - "url", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - -[[package]] -name = "reed-solomon-erasure" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" -dependencies = [ - "smallvec", -] - -[[package]] -name = "regex" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.7.1", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" - -[[package]] -name = "reqwest" -version = "0.11.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" -dependencies = [ - "base64 0.21.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustls" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" -dependencies = [ - "base64 0.21.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "schannel" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" -dependencies = [ - "windows-sys 0.42.0", -] - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "secp256k1" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" -dependencies = [ - "rand 0.8.5", - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" -dependencies = [ - "cc", -] - -[[package]] -name = "security-framework" -version = "2.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" - -[[package]] -name = "serde" -version = "1.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_yaml" -version = "0.9.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - -[[package]] -name = "sha1" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" -dependencies = [ - "sha1_smol", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.6", -] - -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.6", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" - -[[package]] -name = "simd-abstraction" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" -dependencies = [ - "outref", -] - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "smart-default" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "redis", - "tracing", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "termtree" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" - -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" -dependencies = [ - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "once_cell", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "winapi", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-macros" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "tonic" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" -dependencies = [ - "async-stream", - "async-trait", - "base64 0.13.1", - "bytes", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost", - "prost-derive", - "tokio", - "tokio-stream", - "tokio-util 0.6.10", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", -] - -[[package]] -name = "tonic-build" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" -dependencies = [ - "proc-macro2", - "prost-build", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util 0.7.3", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-appender" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e" -dependencies = [ - "crossbeam-channel", - "time 0.3.20", - "tracing-subscriber 0.3.17", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-opentelemetry" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" -dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-log", - "tracing-subscriber 0.3.17", -] - -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "ansi_term", - "chrono", - "lazy_static", - "matchers 0.0.1", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" -dependencies = [ - "matchers 0.1.0", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "uint" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unescape" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccb97dac3243214f8d8507998906ca3e2e0b900bf9bf4870477f125b82e68f6e" - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "unsafe-libyaml" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "urlencoding" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "which" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" -dependencies = [ - "either", - "libc", - "once_cell", -] - -[[package]] -name = "wildmatch" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee583bdc5ff1cf9db20e9db5bb3ff4c3089a8f6b8b31aff265c9aba85812db86" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "xmlparser" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd" - -[[package]] -name = "zeroize" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "zstd" -version = "0.12.3+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" -dependencies = [ - "cc", - "libc", - "pkg-config", -] diff --git a/indexer/Cargo.toml b/indexer/Cargo.toml deleted file mode 100644 index 2e55580d6..000000000 --- a/indexer/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[workspace] - -members = [ - "queryapi_coordinator", - "storage", - "indexer_rules_engine", - "indexer_rule_type" -] diff --git a/indexer/Dockerfile b/indexer/Dockerfile deleted file mode 100644 index 925ed46f5..000000000 --- a/indexer/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM rust:1.68 AS build -ARG CARGO_BUILD_MODE=release -WORKDIR /tmp/ -COPY ./ ./ -RUN if [ "$CARGO_BUILD_MODE" = "debug" ]; then \ - cargo build --package queryapi_coordinator; \ - else \ - cargo build --release --package queryapi_coordinator; \ - fi - -FROM ubuntu:20.04 -ARG CARGO_BUILD_MODE=release -RUN apt update && apt install -yy openssl ca-certificates -USER nobody -COPY --from=build /tmp/target/$CARGO_BUILD_MODE/queryapi_coordinator /queryapi_coordinator -ENTRYPOINT ["/queryapi_coordinator"] diff --git a/indexer/README.md b/indexer/README.md deleted file mode 100644 index 948a6e0f5..000000000 --- a/indexer/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# QueryApi MVP - -An indexer toolset based off of Alertexer to power custom Index Functions. - -### To deploy the queryapi_coordinator module to GCP -See [queryapi_coordinator/README.md](./queryapi_coordinator/README.md) - -Originally forked from Alertexer, see https://github.com/near/alertexer/blob/main/README.md -and https://github.com/near/alertexer/tree/main/docs - -Below is README.md content duplicated from Alertexer that is relevant to running the queryapi_coordinator module. - - -## Structure - -This project is using `workspace` feature of Cargo. - -### Crates - -- [`indexer_rule_type`](./indexer_rule_type) provides the IndexerRule type to this app and the registry contract. -- [`indexer_rules_engine`](./indexer_rules_engine) contains logic for matching IndexerRules against StreamerMessages -- [`storage`](./storage) crate provides the functions to work with Redis - -### Indexers - -- [`queryapi_coordinator`](./queryapi_coordinator) an indexer to index changes to the QueryApi registry contract and - to watch for `IndexerRules` associated with the IndexerFunctions in the registry. - -### Tests -Some tests require blocks with matching data. To download the test block, run -`./download_test_blocks.sh 93085141`. Some other useful blocks are 80854399 92476362 93085141 93659695. - -## Design concept - -Identified major types of the events on the network: - -- `ACTIONS` - following the `ActionReceipts` (party of the transaction, transfer, create account, etc.) -- `EVENTS` - following the [Events Format](https://nomicon.io/Standards/EventsFormat) -- `STATE_CHANGES` *name is a subject to change* - following the `StateChanges` (account state change, stake rewards, account balances changes, etc.) - -## `.env` - -``` -DATABASE_URL=postgres://user:pass@host/database -LAKE_AWS_ACCESS_KEY=AKI_LAKE_ACCESS... -LAKE_AWS_SECRET_ACCESS_KEY=LAKE_SECRET... - -``` -## Running locally - * _Install postgres locally if not already present._ - * Create a local postgres database and user like so, changing the credentials to your liking: -``` -psql -CREATE DATABASE alerts; -CREATE USER alerts WITH PASSWORD 'alerts'; -GRANT ALL PRIVILEGES ON DATABASE alerts TO alerts; -``` - * Update the `.env` file with the database credentials you just set. `host.docker.internal` as the hostname will point to your local host machine. - * Run [schema.sql](./alert-rules/schema.sql) against your alerts DB to create the alert rules tables. - * Grant table privileges to the DB user -``` -psql -GRANT USAGE ON SCHEMA public TO alerts; -GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO alerts; -GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO alerts; -``` - * _Install docker locally if not already present._ - * Run `docker compose up` diff --git a/indexer/download_test_blocks.sh b/indexer/download_test_blocks.sh deleted file mode 100755 index 7a3b5ce77..000000000 --- a/indexer/download_test_blocks.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -mkdir -p ./blocks - -# Iterate over all script arguments -for block_id in "$@" -do - curl -o "./blocks/${block_id}.json" "https://70jshyr5cb.execute-api.eu-central-1.amazonaws.com/block/${block_id}?snake_case=true" -done \ No newline at end of file diff --git a/indexer/indexer_rule_type/Cargo.lock b/indexer/indexer_rule_type/Cargo.lock deleted file mode 100644 index 189618a27..000000000 --- a/indexer/indexer_rule_type/Cargo.lock +++ /dev/null @@ -1,3164 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" - -[[package]] -name = "actix" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba56612922b907719d4a01cf11c8d5b458e7d3dba946d0435f20f58d6795ed2" -dependencies = [ - "actix-macros", - "actix-rt", - "actix_derive", - "bitflags 2.4.1", - "bytes", - "crossbeam-channel", - "futures-core", - "futures-sink", - "futures-task", - "futures-util", - "log", - "once_cell", - "parking_lot", - "pin-project-lite", - "smallvec", - "tokio", - "tokio-util 0.7.10", -] - -[[package]] -name = "actix-macros" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" -dependencies = [ - "quote", - "syn 2.0.41", -] - -[[package]] -name = "actix-rt" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28f32d40287d3f402ae0028a9d54bef51af15c8769492826a69d28f81893151d" -dependencies = [ - "futures-core", - "tokio", -] - -[[package]] -name = "actix_derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7db3d5a9718568e4cf4a537cfd7070e6e6ff7481510d0237fb529ac850f6d3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom 0.2.9", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" -dependencies = [ - "cfg-if 1.0.0", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" - -[[package]] -name = "anstyle-parse" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - -[[package]] -name = "anyhow" -version = "1.0.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" - -[[package]] -name = "arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "async-trait" -version = "0.1.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" - -[[package]] -name = "blake2" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" -dependencies = [ - "crypto-mac", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "borsh" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" -dependencies = [ - "borsh-derive 0.9.3", - "hashbrown 0.11.2", -] - -[[package]] -name = "borsh" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" -dependencies = [ - "borsh-derive 0.10.3", - "hashbrown 0.13.2", -] - -[[package]] -name = "borsh" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a744ac76a433734df0902926ed12edd997391a8da3add87f6d706afc2dcbea" -dependencies = [ - "borsh-derive 1.1.2", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" -dependencies = [ - "borsh-derive-internal 0.9.3", - "borsh-schema-derive-internal 0.9.3", - "proc-macro-crate 0.1.5", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "borsh-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" -dependencies = [ - "borsh-derive-internal 0.10.3", - "borsh-schema-derive-internal 0.10.3", - "proc-macro-crate 0.1.5", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "borsh-derive" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22bf794b9f8c87b51ea4d9e2710907ce13aa81dd2b8ac18a78fcca68ac738ef" -dependencies = [ - "once_cell", - "proc-macro-crate 2.0.1", - "proc-macro2", - "quote", - "syn 2.0.41", - "syn_derive", -] - -[[package]] -name = "borsh-derive-internal" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "borsh-derive-internal" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - -[[package]] -name = "bumpalo" -version = "3.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" - -[[package]] -name = "bytesize" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5" -dependencies = [ - "serde", -] - -[[package]] -name = "c2-chacha" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80" -dependencies = [ - "cipher", - "ppv-lite86", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - -[[package]] -name = "chrono" -version = "0.4.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-integer", - "num-traits", - "serde", - "time 0.1.45", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array", -] - -[[package]] -name = "clap" -version = "4.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "clap_lex" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "cpufeatures" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c3242926edf34aec4ac3a77108ad4854bffaa2e4ddc1824124ce59231302d5" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.41", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "deranged" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derive_arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer 0.10.4", - "crypto-common", -] - -[[package]] -name = "dyn-clone" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" - -[[package]] -name = "easy-ext" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53aff6fdc1b181225acdcb5b14c47106726fd8e486707315b1b138baed68ee31" - -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "enum-map" -version = "2.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" -dependencies = [ - "enum-map-derive", -] - -[[package]] -name = "enum-map-derive" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "fixed-hash" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" -dependencies = [ - "static_assertions", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "futures" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" - -[[package]] -name = "futures-executor" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" - -[[package]] -name = "futures-sink" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" - -[[package]] -name = "futures-task" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" - -[[package]] -name = "futures-util" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "h2" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 2.1.0", - "slab", - "tokio", - "tokio-util 0.7.10", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash 0.7.6", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash 0.8.3", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] - -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "indexer_rule_type" -version = "0.1.0" -dependencies = [ - "borsh 0.10.3", - "near-sdk", - "serde", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", - "serde", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "js-sys" -version = "0.3.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json_comments" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" - -[[package]] -name = "keccak" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin", -] - -[[package]] -name = "libc" -version = "0.2.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" - -[[package]] -name = "linux-raw-sys" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" - -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "near-abi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ac4e2d843390b1a007ad206022b4252d0fe3756d8b6609bc025cce07949bc5" -dependencies = [ - "borsh 1.1.2", - "schemars", - "semver", - "serde", -] - -[[package]] -name = "near-account-id" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0cb40869cab7f5232f934f45db35bffe0f2d2a7cb0cd0346202fbe4ebf2dd7" -dependencies = [ - "borsh 0.10.3", - "serde", -] - -[[package]] -name = "near-account-id" -version = "1.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d10d45a9c49c3e975c362cf4d1dc1d7b72a716b30394bea56ee2a8fb225f50b7" -dependencies = [ - "borsh 1.1.2", - "schemars", - "serde", -] - -[[package]] -name = "near-config-utils" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5523e7dce493c45bc3241eb3100d943ec471852f9b1f84b46a34789eadf17031" -dependencies = [ - "anyhow", - "json_comments", - "thiserror", - "tracing", -] - -[[package]] -name = "near-crypto" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6b382b626e7e0cd372d027c6672ac97b4b6ee6114288c9e58d8180b935d315" -dependencies = [ - "blake2", - "borsh 0.10.3", - "bs58", - "c2-chacha", - "curve25519-dalek", - "derive_more", - "ed25519-dalek", - "hex", - "near-account-id 0.17.0", - "near-config-utils", - "near-stdx", - "once_cell", - "primitive-types", - "rand 0.7.3", - "secp256k1", - "serde", - "serde_json", - "subtle", - "thiserror", -] - -[[package]] -name = "near-fmt" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c44c842c6cfcd9b8c387cccd4cd0619a5f21920cde5d5c292af3cc5d40510672" -dependencies = [ - "near-primitives-core", -] - -[[package]] -name = "near-gas" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e75c875026229902d065e4435804497337b631ec69ba746b102954273e9ad1" -dependencies = [ - "borsh 1.1.2", - "schemars", - "serde", -] - -[[package]] -name = "near-o11y" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7d35397b02b131c188c72f3885e97daeccab134ec2fc8cc0073a94cf1cfe19" -dependencies = [ - "actix", - "atty", - "clap", - "near-crypto", - "near-primitives-core", - "once_cell", - "opentelemetry", - "opentelemetry-otlp", - "opentelemetry-semantic-conventions", - "prometheus", - "serde", - "strum", - "thiserror", - "tokio", - "tracing", - "tracing-appender", - "tracing-opentelemetry", - "tracing-subscriber", -] - -[[package]] -name = "near-primitives" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f7051aaf199adc4d068620fca6d5f70f906a1540d03a8bb3701271f8881835" -dependencies = [ - "arbitrary", - "borsh 0.10.3", - "bytesize", - "cfg-if 1.0.0", - "chrono", - "derive_more", - "easy-ext", - "enum-map", - "hex", - "near-crypto", - "near-fmt", - "near-primitives-core", - "near-rpc-error-macro", - "near-stdx", - "near-vm-errors", - "num-rational", - "once_cell", - "primitive-types", - "rand 0.8.5", - "reed-solomon-erasure", - "serde", - "serde_json", - "serde_with", - "serde_yaml", - "smart-default", - "strum", - "thiserror", - "time 0.3.30", - "tracing", -] - -[[package]] -name = "near-primitives-core" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775fec19ef51a341abdbf792a9dda5b4cb89f488f681b2fd689b9321d24db47b" -dependencies = [ - "arbitrary", - "base64 0.21.5", - "borsh 0.10.3", - "bs58", - "derive_more", - "enum-map", - "near-account-id 0.17.0", - "num-rational", - "serde", - "serde_repr", - "serde_with", - "sha2 0.10.6", - "strum", - "thiserror", -] - -[[package]] -name = "near-rpc-error-core" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c1eda300e2e78f4f945ae58117d49e806899f4a51ee2faa09eda5ebc2e6571" -dependencies = [ - "quote", - "serde", - "syn 2.0.41", -] - -[[package]] -name = "near-rpc-error-macro" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31d2dadd765101c77e664029dd6fbec090e696877d4ae903c620d02ceda4969a" -dependencies = [ - "fs2", - "near-rpc-error-core", - "serde", - "syn 2.0.41", -] - -[[package]] -name = "near-sdk" -version = "5.0.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62385d178cbf20d7b62277e0ffe5d65b133989994240b2789d5510fa7de332da" -dependencies = [ - "base64 0.13.1", - "borsh 1.1.2", - "bs58", - "near-abi", - "near-account-id 1.0.0-alpha.4", - "near-crypto", - "near-gas", - "near-primitives", - "near-primitives-core", - "near-sdk-macros", - "near-sys", - "near-token", - "near-vm-logic", - "once_cell", - "schemars", - "serde", - "serde_json", - "wee_alloc", -] - -[[package]] -name = "near-sdk-macros" -version = "5.0.0-alpha.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00f960e5f28e8b5a223de7ba35f494c094c213c7b50f94927713a93736013dd" -dependencies = [ - "Inflector", - "darling", - "proc-macro2", - "quote", - "serde", - "serde_json", - "strum", - "strum_macros", - "syn 2.0.41", -] - -[[package]] -name = "near-stdx" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6540152fba5e96fe5d575b79e8cd244cf2add747bb01362426bdc069bc3a23bc" - -[[package]] -name = "near-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397688591acf8d3ebf2c2485ba32d4b24fc10aad5334e3ad8ec0b7179bfdf06b" - -[[package]] -name = "near-token" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b68f3f8a2409f72b43efdbeff8e820b81e70824c49fee8572979d789d1683fb" -dependencies = [ - "borsh 1.1.2", - "schemars", - "serde", -] - -[[package]] -name = "near-vm-errors" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec545d1bede0579e7c15dd2dce9b998dc975c52f2165702ff40bec7ff69728bb" -dependencies = [ - "borsh 0.10.3", - "near-account-id 0.17.0", - "near-rpc-error-macro", - "serde", - "strum", - "thiserror", -] - -[[package]] -name = "near-vm-logic" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7487c678ed1963a0ecd5033f72bb41caa58debd6fe8025a9bef6e1a6a519a" -dependencies = [ - "borsh 0.10.3", - "ed25519-dalek", - "near-account-id 0.17.0", - "near-crypto", - "near-fmt", - "near-o11y", - "near-primitives", - "near-primitives-core", - "near-stdx", - "near-vm-errors", - "ripemd", - "serde", - "sha2 0.10.6", - "sha3", - "zeropool-bn", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", - "serde", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.3", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "opentelemetry" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures-channel", - "futures-executor", - "futures-util", - "js-sys", - "lazy_static", - "percent-encoding", - "pin-project", - "rand 0.8.5", - "thiserror", - "tokio", - "tokio-stream", -] - -[[package]] -name = "opentelemetry-otlp" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a" -dependencies = [ - "async-trait", - "futures", - "futures-util", - "http", - "opentelemetry", - "prost", - "thiserror", - "tokio", - "tonic", - "tonic-build", -] - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985cc35d832d412224b2cffe2f9194b1b89b6aa5d0bef76d080dce09d90e62bd" -dependencies = [ - "opentelemetry", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.48.0", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap 2.1.0", -] - -[[package]] -name = "pin-project" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "primitive-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" -dependencies = [ - "fixed-hash", - "uint", -] - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" -dependencies = [ - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.70" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prometheus" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" -dependencies = [ - "cfg-if 1.0.0", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf", - "thiserror", -] - -[[package]] -name = "prost" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" -dependencies = [ - "bytes", - "heck 0.3.3", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prost", - "prost-types", - "regex", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "prost-types" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" -dependencies = [ - "bytes", - "prost", -] - -[[package]] -name = "protobuf" -version = "2.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" - -[[package]] -name = "quote" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "reed-solomon-erasure" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" -dependencies = [ - "smallvec", -] - -[[package]] -name = "regex" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.3.7", - "regex-syntax 0.7.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.7.5", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" -dependencies = [ - "bitflags 2.4.1", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "schemars" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 1.0.109", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "secp256k1" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" -dependencies = [ - "rand 0.8.5", - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" -dependencies = [ - "cc", -] - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" - -[[package]] -name = "serde" -version = "1.0.193" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.193" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "serde_derive_internals" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "serde_with" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" -dependencies = [ - "base64 0.21.5", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.1.0", - "serde", - "serde_json", - "serde_with_macros", - "time 0.3.30", -] - -[[package]] -name = "serde_with_macros" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "serde_yaml" -version = "0.9.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" -dependencies = [ - "indexmap 2.1.0", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.6", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest 0.10.6", - "keccak", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "smart-default" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", -] - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "tempfile" -version = "3.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" -dependencies = [ - "cfg-if 1.0.0", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.48.0", -] - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if 1.0.0", - "once_cell", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" -dependencies = [ - "deranged", - "itoa", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" -dependencies = [ - "time-core", -] - -[[package]] -name = "tokio" -version = "1.28.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" -dependencies = [ - "autocfg", - "bytes", - "libc", - "mio", - "num_cpus", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-macros" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" - -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" -dependencies = [ - "indexmap 2.1.0", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tonic" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" -dependencies = [ - "async-stream", - "async-trait", - "base64 0.13.1", - "bytes", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost", - "prost-derive", - "tokio", - "tokio-stream", - "tokio-util 0.6.10", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", -] - -[[package]] -name = "tonic-build" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" -dependencies = [ - "proc-macro2", - "prost-build", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util 0.7.10", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-appender" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" -dependencies = [ - "crossbeam-channel", - "thiserror", - "time 0.3.30", - "tracing-subscriber", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-opentelemetry" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" -dependencies = [ - "once_cell", - "opentelemetry", - "tracing", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log 0.2.0", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "uint" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unsafe-libyaml" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.41", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" - -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "memory_units", - "winapi", -] - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "winnow" -version = "0.5.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2" -dependencies = [ - "memchr", -] - -[[package]] -name = "zeroize" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "zeropool-bn" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e61de68ede9ffdd69c01664f65a178c5188b73f78faa21f0936016a888ff7c" -dependencies = [ - "borsh 0.9.3", - "byteorder", - "crunchy", - "lazy_static", - "rand 0.8.5", - "rustc-hex", -] diff --git a/indexer/indexer_rule_type/Cargo.toml b/indexer/indexer_rule_type/Cargo.toml deleted file mode 100644 index d64871f8e..000000000 --- a/indexer/indexer_rule_type/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "indexer_rule_type" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -borsh = "0.10.2" -serde = "1" diff --git a/indexer/indexer_rule_type/src/indexer_rule.rs b/indexer/indexer_rule_type/src/indexer_rule.rs deleted file mode 100644 index ebb5148aa..000000000 --- a/indexer/indexer_rule_type/src/indexer_rule.rs +++ /dev/null @@ -1,47 +0,0 @@ -use borsh::{self, BorshDeserialize, BorshSerialize}; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize, PartialEq, Eq)] -pub struct IndexerRule { - pub indexer_rule_kind: IndexerRuleKind, - pub matching_rule: MatchingRule, - pub id: Option, - pub name: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize, PartialEq, Eq)] -pub enum IndexerRuleKind { - Action, - Event, - AnyBlock, - Shard, -} -// future: ComposedRuleKind for multiple actions or events - -#[derive(Clone, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize, PartialEq, Eq)] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] -pub enum Status { - Any, - Success, - Fail, -} - -#[derive(Clone, Debug, Serialize, Deserialize, BorshSerialize, BorshDeserialize, PartialEq, Eq)] -#[serde(tag = "rule", rename_all = "SCREAMING_SNAKE_CASE")] -pub enum MatchingRule { - ActionAny { - affected_account_id: String, - status: Status, - }, - ActionFunctionCall { - affected_account_id: String, - status: Status, - function: String, - }, - Event { - contract_account_id: String, - standard: String, - version: String, - event: String, - }, -} diff --git a/indexer/indexer_rule_type/src/lib.rs b/indexer/indexer_rule_type/src/lib.rs deleted file mode 100644 index 2bc5a4ba6..000000000 --- a/indexer/indexer_rule_type/src/lib.rs +++ /dev/null @@ -1,18 +0,0 @@ -pub mod indexer_rule; - -use indexer_rule::{IndexerRule, IndexerRuleKind, MatchingRule, Status}; -pub fn near_social_indexer_rule() -> IndexerRule { - let contract = "social.near"; - let method = "set"; - let matching_rule = MatchingRule::ActionFunctionCall { - affected_account_id: contract.to_string(), - function: method.to_string(), - status: Status::Any, - }; - IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule, - id: None, - name: None, - } -} diff --git a/indexer/indexer_rules_engine/Cargo.toml b/indexer/indexer_rules_engine/Cargo.toml deleted file mode 100644 index 25361c349..000000000 --- a/indexer/indexer_rules_engine/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "indexer_rules_engine" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.57" -borsh = "0.10.2" -futures = "0.3.5" -serde = { version = "1", features = ["derive"] } -serde_json = "1.0.55" -wildmatch = "2.1.1" - -near-lake-framework = "0.7.1" -indexer_rule_type = { path = "../indexer_rule_type" } - -[dev-dependencies] -tokio = { version = "1.0.1", features = ["full"] } diff --git a/indexer/indexer_rules_engine/README.md b/indexer/indexer_rules_engine/README.md deleted file mode 100644 index 3aff705ed..000000000 --- a/indexer/indexer_rules_engine/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Indexer Rules Engine - -Types for defining matching rules. -Naive rule matching implementation. - -## Future -More efficient matching, probably https://crates.io/crates/phreak_engine \ No newline at end of file diff --git a/indexer/indexer_rules_engine/blocks/93085141.json b/indexer/indexer_rules_engine/blocks/93085141.json deleted file mode 100644 index 5c71dc5bf..000000000 --- a/indexer/indexer_rules_engine/blocks/93085141.json +++ /dev/null @@ -1,3551 +0,0 @@ -{ - "block": { - "author": "dqw9k3e4422cxt92masmy.poolv1.near", - "chunks": [ - { - "balance_burnt": "903157226440000000000", - "chunk_hash": "5bPAyMhwELc3KR4aKSc3cNBLGm32HFEqRUYXri43ipbH", - "encoded_length": 2773, - "encoded_merkle_root": "7yg9tcw7eA4o9V7NUy1gzdQ1bW4poTtMcjhX2df2T41W", - "gas_limit": 1000000000000000, - "gas_used": 21556415326900, - "height_created": 93085141, - "height_included": 93085141, - "outcome_root": "2WgvyuAvefXHw2Bu5tHBYqaNRnzEdkBV1kbX9rZhqHdR", - "outgoing_receipts_root": "FmmxRvexn9MaM6kaywm5TJ4bAXma9LC8GvX3BYMSbBPj", - "prev_block_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_state_root": "EgehqBxv1rs2143KmLDrbmyhZwHcHgZZwj5kjc48CLAn", - "rent_paid": "0", - "shard_id": 0, - "signature": "ed25519:5TQhvjHdmG4YMATrHYM4K96VRF6FRuu1LcrBG3WMFLEkHXo7gG2D3RGN2hnGMNVLosQqVGw91uMKfHvkNhe857Lq", - "tx_root": "5K8i8seBPYEKSXwsG9NugZmKhFmv7zgFbUAwqX7TNEfR", - "validator_proposals": [], - "validator_reward": "0" - }, - { - "balance_burnt": "336955792883000000000", - "chunk_hash": "4K9Zj1ZanDm9Cu3G4JnRWsCTPjhT7iMsb2m1ACNexvPZ", - "encoded_length": 161, - "encoded_merkle_root": "ExpvgdXmijmisL9VWUSZd6cH2XZ8KjMfvRq2TFXwWaJ", - "gas_limit": 1000000000000000, - "gas_used": 3772355756216, - "height_created": 93085141, - "height_included": 93085141, - "outcome_root": "35sKVEqAvGiAddvByfoFNyJz7DF5AYWaPnLPGqqvwi3s", - "outgoing_receipts_root": "DaAh9aGfy8hrRkSPa8VajKr4JG6eivSGognFYQXuezTG", - "prev_block_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_state_root": "9D5KaP2ZukXZR5SKAXgU9cuq5niDuvpjrbCXofAzy4ow", - "rent_paid": "0", - "shard_id": 1, - "signature": "ed25519:3thVBMZWNUgwdLsNtm2hfHF2MrHhovjN9aQQJAi7uNicKw8eUyLjbcpwVMorQ6uT9JbK1GJbto9m1XWF5XNr96LW", - "tx_root": "11111111111111111111111111111111", - "validator_proposals": [], - "validator_reward": "0" - }, - { - "balance_burnt": "660301625914400000000", - "chunk_hash": "GWGFPyAvWLnHw4eo8XEUNz3EFpfogE4acJ13h8jorTT1", - "encoded_length": 701, - "encoded_merkle_root": "AVWEeygQLxnYMGREJmAQE4BDQwsg1FCJJ2dK2kWNh47W", - "gas_limit": 1000000000000000, - "gas_used": 7049381384144, - "height_created": 93085141, - "height_included": 93085141, - "outcome_root": "CxxEgz23MJKojjGWXe3muBjD6yiLCSo7NyGgfpu64aug", - "outgoing_receipts_root": "H96o6Z112kp4FgNm5rbpGxNCc53x4bbmcPce6NpaFMoK", - "prev_block_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_state_root": "5TztQJP7d3436iXmFpG5PSYAtNhz9mNYu7XJ8UyxDpQe", - "rent_paid": "0", - "shard_id": 2, - "signature": "ed25519:3eNQL7PXH96tb2LkkYdNrHJ8nB7PpGjCc98gsURvMMMifsWcjL48AM9AB1QWZFCFd61oiyGViKKKB8HSYom4z7jP", - "tx_root": "AWG7nTuyxSdtk5sEwGuB1mUmACnkAvGMn5zw8mbgXAFP", - "validator_proposals": [], - "validator_reward": "0" - }, - { - "balance_burnt": "2290298267551700000000", - "chunk_hash": "6s29toMBxow7sNNf2huCzs9Jx77cuD4Ei6Q53FsJRV8e", - "encoded_length": 2884, - "encoded_merkle_root": "6e2PjAbKLmK3ZHMDuU6AGqbF7LuKXQrx8Ha9X5jtQT2m", - "gas_limit": 1000000000000000, - "gas_used": 25705493164532, - "height_created": 93085141, - "height_included": 93085141, - "outcome_root": "D14cNKyYmNfNrHkXAgdQREjf9sUdgBbretD8bTzzibup", - "outgoing_receipts_root": "DpPAKmARwUGBfYLDbXWPTL53auH3ingsvsFsj2MCwbe6", - "prev_block_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_state_root": "98HzgR4qeCoV9R8KXw3i27HdQreH5o4j5VWmocxHh19A", - "rent_paid": "0", - "shard_id": 3, - "signature": "ed25519:2wvGjamXwpn3euAyv8Xr951ZJVzGeMJiMQ8cGTa6HwW986kfPe5YCFhMytaNLe74MxgpezX8Fy3ptRbaBiPZCPAk", - "tx_root": "4iRESwugTeYZzUeYs6VxbUQHvnX2UnBrY7yXRpB6fUyG", - "validator_proposals": [], - "validator_reward": "0" - } - ], - "header": { - "approvals": [ - null, - "ed25519:4HYCJoWocKxNbKSSidjAz5BjoXMMKEBxbNGq8UUBVgaoXmNCEH3d9N7esrNAC8gBDCasBbanQewSqS7HtZrxvsKT", - null, - "ed25519:5niT2KXArCjASKSXmDExZFbiNM2romNs1xK7GV55sF6hmzZKiLwMxqSq9E25aAzAEHe2wbUJwmiX1MspqR4UUSb4", - "ed25519:2nD3Kt7fitrK1reyfmMxcszHhmWiqEsBv6cA4ngvcxXS85C2D4vNav7zu9XmwTW4UMgddnbdpHrWdFB5pTW3J6nu", - "ed25519:2o4Zudk89Ej4JViZ2UvD1hWBvwy2jKhXti7JiK1r5MAAd3JyeZeeRFqZMwtvuuzwnGaJ9pxtZj3aKv4iqii3h23p", - null, - "ed25519:5kzTHdjtvyDAoAMPZhNYCzaHHRK9H5bMKYqxc5iVn1AhEWgafVjUaUUQZnYd8QiQdTj26JyeMGyVTuEHr1er1GFM", - "ed25519:3CgQcnTbSTnvrcHQzgHiffbEwMc8zkyijdWutvsZ8edCoWxofuuBfmcjbNGQ7caHgtNzk72WnXtDHRRj7GVaRZoC", - "ed25519:3p9wJWFTWnuYWbHxWjt26j7jdfRY8rdzyvtQZpGhU9UphqvU7jGXdzCx2kdvG9QmCxK8DTpBCiGVL7FWBQRJv6dD", - "ed25519:2hwsh9PAQhVy9FFudJi4VDjKPvsgpo2AUG7gvidXGdUXiCTteBfFvvY6WQQmd5MBL7CdffSX3dfCLzB7meMGebHo", - null, - "ed25519:HdDKYdDoaULziJdCXkBdS1zKG7RjbB9GQw32TLptMAhKr8KGe5vz364qSAqBoWS8bqiQYhLRpi9AeKX3rLdj9qK", - "ed25519:4uZc3sx2QZqQEVATHpY3WJXA4nwe1JFQBUMMhSfsGS3C5YFddY466CUFF7wRGyguLP9AfW13GcJLJwWxAfmWSFuM", - "ed25519:4RELctCZPjp8YrzNd2gtjCe9YzxdZP3c317NNEVNo1drgfWQgXLC26mRRf6bfyC4BfGcGPm6jGiTeNrvGkmY44RA", - null, - "ed25519:2CjAxrVZUwESUTGeWhkVe7suhKHrSgfMfAyjrPCsoUa7HzXnS9yLj52E9qkti9CqSe4pR182EXrSssoNDPEKqcXH", - "ed25519:3tb7X5aY553bsgU8KmVfHwD1fCYQjZgckdCbZTraiU2M6i4a1PZ6ex8XgmUeYMMiSZ4VzAWtXEnBVfHsDcAJmKrV", - "ed25519:2DGQcpQXF6EDMSxHctRGg3fxTMn6GFsYoanQZ7fvYoonVwNCRWaxkT2FZtHjdKqz81CcvzTo333FZ2MSdrMc1c69", - null, - "ed25519:52wHrbjDLSvLePRW7rHqCqtVy7bwzFmw1cQnLHsfbG3Bq6qHip12kJuPRNbRwSp6Pka1LiRsa3D2ByrpMEdRb8Lm", - null, - null, - null, - "ed25519:4eP3aHeHB62u6ioj9kfwhucKzCi4P4nWJPbn4yW5LoLWgE3ZKcCeWxCy9VqTCLvA3MmFiXcCRkMvwURRRev2L7Hn", - "ed25519:4NCmDQRrUFG79fyfWpHLZoU18C1kRvfNQoK3KWZNP3vM2t9UhmtsDuJQigAdWpbaruCg1vnTF4mSe12RFG1Yx4nT", - "ed25519:epjv5H1JHBYW9w2Um9ugMqxoWk19pKPwxXbxx22FiFRRQta7UZ64V4cJTpZN8LSQLBmohtkXgGpFoM8Ee8Cnd1a", - "ed25519:3wQ2U8wy5qjAbnQDtLS4GtmZF67rasS7jdVxtic3BaLyLsHqBgrtTWN94nHA7ZeW8itBvbCwUXJaJ6hpPcc6hJik", - "ed25519:4Jos8kYf3qaL2cR5HzxVSc7fz6jZC5M9gnShu9ZtdyPdbwk5pkZ14UFDzKn7TowjU8CG7oLMWsmCw7B6qMW4kvoU", - "ed25519:v4oJR9cDvJBAYrsf3y91Y8wS2PB7ypNKiZDV4VP7oYnnnMxoeHegR64pK5omWP7cum8oBEuLAqhSt9n5rF2p55g", - "ed25519:4TD6vC4zxpvpQHuUAhaU599y3xdq1knhETZ1yCP6SExV2nedGYdppm6iSLmvgWYkWCpAT1osCARGCmjgMvLqsFPk", - "ed25519:28YWj6WsGhDvdhQuBmcHJNUtKUcZa1oTEG3F4wA5wmPstBTMQDSsHHXAzn6NmqDe7YCn9KQyyF9VjbV31uYCXJSx", - "ed25519:3WoLkAA7VYJZHeCXx92it9DkpaUgYTR2Li7ZT28cQJMDh6tFn61rEnLsrxhEvJP1MXf3mwkffvnJW2i3VL3uVQAc", - "ed25519:2bLDSM6E9PJRwEuFEdwKqgvES5WVrfvEqyMcBzZoRdAbzwVkvaWmVHoaSyhngmzg6r88JnhW5wbTrtNkoM4PdLBx", - null, - "ed25519:3mykmLd69RSNku9J7FJXop6DGN11qdgcScjH7FLXfhd62JQsJWn1UXw4evRy8UVsed6H7itHinitBuDaaCHtCZ6y", - "ed25519:5nG686LojijSXksbkJeosCZSW9owMpfJJCuG9715W2QTwtR6UKvUDT1hVc7pgc8jvUTCbV5DzdMmN6QCVCKjEMoX", - "ed25519:5uScg7KriN8mqFpqg3ASZnw7B9NoLpy58RFvJYckxniJmRcKRmuirRke5cxWipS8XdESLnpVcCtwvgytx5dQyNpy", - "ed25519:64oobKzAVxoR7M79k7DGj69ph46BtneQmC4TNr7Qfs3uZQvbSmKsuqXmYWT4a924ZsSsaifrHovPfS9vRMWc6TZG", - null, - "ed25519:4wD4ADV8DY757ZzGUgAfuyLWuodjVE3NgkB8nK9iA4Lbj8DTgRvY9k3jiFh57BtdPxTk3kanMHmQQHtfPtcWkCiA", - null, - "ed25519:5HPakWjG2nmHUHyqVX7J5fLAFh6XDR6EbzrvwhUt8WvGFkr8APL6Y2yb6cciSXedHrX5h53RhLtamPkwKGSgEVFG", - null, - "ed25519:4GrbvuhubRwCrKeeRQtiZpKyCNEMZ3GsABN4QDqRxxotgRzwfA9Re74YtXHaGuE7A7KSNxiC3b7CHpC41AVCsTzr", - "ed25519:2nV6CWrs1PZX7RHGN8Tkna4yT9DNteQTMK1k7ZDyHfVLdLhV2GUFTFXug1vgX9VvaB7yFHHLFgJiQiHGuzWuiRxg", - "ed25519:2mHdkmvy5UeHSdLpMqGCkcmm7BktSciz9q5wv2EbMhuik9Bj58GXpbcYXqWrQpxT9wN1nedkkiZ8QDZ4C18nhjmt", - "ed25519:2DjQgKM8scshWmATPUj9ahpAqH9WfUmrjGcKaGvGsKTt3XAr88j4Yt4PjyYJDqEvsKqNLMbcgqjAnga2EpBTC6Bq", - "ed25519:2JYqxYHGLNBNm92mSPz5vbyYLry34W4WYmtwwNcDvh41SCp2zqQqbxtVjJdSRN1ZrHin1XxgSZXiy7baS74SXsbg", - "ed25519:3NLGtTxWmpeukuMAzXj77MCkFeE2RdVdSJttuE9hXV5qojF172Hf9agEyMHdjareobQjsSReQ3wfrWLxYLN22Rqw", - "ed25519:4yEtJkQh4efoYRWwHGyFKVyG4rN7VTJ836W7vGeYHKejpmb2R5ijXqGZhtaCDskkz61m5AYSN4QByyoe9RGa4iZN", - "ed25519:5KiXwmjLFhNZMgkWpekbqxUTZDF2PYH6RcQXPGSd6CLD1qEhPUZxZr87k6E8oYSuVvWYUaAiPUSffUP5PPryEqxg", - "ed25519:1offZT4dyKqUeKFz1efk49JyXaKr5SYkpnDNLoXMafZGHjYu9DvkeKbBVD3fgic2WduM5Miw6Vsn8qP84iy64GK", - "ed25519:G5VnYeDn7LWhtDFe6xLAwV1wAsA4RiBXC23JbZSo3vPYGuntSpJCDousVAmyMwnv71FEJd7sSFgBwVdJNwBMAVd", - "ed25519:K8iDGo8Vv3pBRiUP6FyQ5srui2uWu46gveAbA6eV53wNq467r7LQTPkCVMXDGNy7MuFQ4sY9edKSH2ZPp5p2f2b", - null, - "ed25519:28JuVaig2Q1awtbtC1n5uUcFCQw5kuRKrrMYVXYDj5FcW7XuLESTK9Y2CRbvEYDBKTqS3CiGDu1qNkkCbcAmL7PW", - "ed25519:4mJzYDG62W9tY4YRtudHoK3d3VGihs2eiKBsNpf8RjvcaRLbwBkUugPNYKHUxB5pWktvPbwZMuKTLRmj2WQvFYAA", - null, - null, - "ed25519:5qAEqG4W4Ta54PT8dqaVSkwwjuLn7zLqwPAagNqE65Ki9HQhKA4xgqCypwCed138mpQArKC16BnqgJ3hGe7kZkuB", - null, - null, - "ed25519:vfE4gTvTUvFXzDAu2u9GwE69YvsvAN3bqquMD9rbxHHbhGuaYDh97dnnG6osyh4znGz3UKbNPDe76EE63caTeDU", - null, - "ed25519:4Q28eMmN4avey4PgPNRLDEj68jYFkcKSyuaVy7E31tXGHGFowkKj3oCo3Vrje96wTaTTTjfhUdvR73omKqswPWbk", - null, - null, - "ed25519:JuX5CxZkEGQCCZMjM6YhDHp5kPdbfPKb7CiHCrw2nt531a79xcdRm5U3NUPPJ7V3q63BMck7CyTxjRik9UrD42E", - "ed25519:R21mUu3fs976BUBiY4F2TQUoNmrd9QrUVBycVenpRfYVPqyjxY4ZSQrdYjN7HqBPp7jNdQGcTb4FRSpbjgEM3TJ", - "ed25519:3H2YzGRbjDP75Q4qdKTVUEkkCMuoUK6RXjZs9ZGTuvcfRYRBtYTFRsBLdUEdX7HbiaCxa31Wfc3e4DKpgdhD4nXk", - null, - "ed25519:5PviJZ2sCnbdp94FDFUxzVzxg4o3iVitb7NX2QxuYGe4ozWNLWzpPZAZhGT4WwgQjuxwcxt9weCjCbii8BqthnnR", - "ed25519:3B1Ci4h9urWnzhStfVRY8HNFhKNuHnb4LCQJaDSS11SxJUvAZAgu9M1XW6M1vMMS7rCjQWdEgjJspgSdsMbRWoi4", - "ed25519:D4T7Ms6xqU7hj9SSMnWtpBkMKuFpeRuEY4qYDiz2uhD3jfT2kw4e7LgS89jByG9D5GEvwKxTtGySMRCJu5uXE2H", - "ed25519:UYa6UfUg62DAn24BhEtGTYo1X9MsHqxHvkjsEvWN9GrfQvMzxobNMRibFGdiPbsSmJiKzjRh7yZWk9zQaG8kpYR", - null, - null, - null, - "ed25519:2qUp5cpkTC5EfYnny7Q31M4jyYkGQuqcKiakemL5BPHdiBoduz1W8nMhMKDYuE83nQg4edTaGHHC31npLbN24e6G", - "ed25519:3d54DjetvbXWJumWBDv2CKRgSf3xNf3VEn9jTzs28qNXe1E6o9rZEZG9T1W4n2GVbyxLqDmnTHcyYNJedvgpkoZC", - "ed25519:5BZTh4sLwcafATBZhm67AnpLWNQSMG9RD4JhLtp3kmt9DWjda79yb4CKuGp78j26EwsAZ2gbMWnf9q1taEB76QtQ", - "ed25519:37epXQ6CV3tLbwJZs9vqhtGw99bP3EzQBZAgyBLH6GNyuikSHrUUt3uNaJkJ9M2QPyApFH5JUA2ZNCQD1kKA5Mgt", - "ed25519:4vk3W5AoyvkPoHAw13HjYrD2GCCUietBQ6mPD2BFCt849LmqZrLxeUZzu3tuB2kf76kyJcCiGSxstC4hk4JEEDCe", - "ed25519:c7rLHEWBMdkbEfftbF7yXZfFK4ZWBYAEhEEnfDh22tbJBcQrbihUt1RUgVX4FzwLkaKuw2CyRURjoUmTZtXeoEU", - null, - "ed25519:2QLeh4wih2PupVoLmaBttiY2xyHdGzNwfc2qHaaUZPbFZDnNrXjSXuLPZpjtiFAvTSoUx9J7TgGCwLz925UUxaD6", - "ed25519:PoaZWKXqjtsKqz8XsS6RhHuZovAEFiBzYvu1NomCCpKzgPxvsBswTSDEDY67NoVfuWHnEZVbU72ZzxLDBkjinwC", - "ed25519:57CrwA7b1cWiVEdL3mBM1LhNJk6QeLkXPczEHoKNe6srGUQMbVbELtEnaVFfwkEwbYYWWepEUYnxqE3TN7bYRLsX", - "ed25519:37LMxibT39TYPd7kRE4MBtghQUiFd4EeodGTisTwJ27LWy9ErydUMt6BjrdJ3yWxpNBG9rksu3CaswqCixrvQuJH", - "ed25519:274RCejDGzCoYWfqRMyejr97cwWGq89dwRwpkwUM3voQZXTxo5UPFmSJYk2zBMcZiooknJNtzD9VzgTSTzJNXEBA", - "ed25519:4BmhUT5Ma1M3MUwoRJYDQe1vcoEySK95n2j2xB87vvrsGdGGEUDC7o8Yg6dMWib4MHs2iw4XeqE5wAZu1KEQ3dxe", - "ed25519:3ev6y5gRZguRbtu4hrsHXn6BTnq6bjpDnFHCdhVaKmmoyrog2qHzgmbAcvpz3EoakPsVwzjmUKJp82CHHehFGTSz", - "ed25519:3ZDQUSu2W5vVsmCJyRS36q5vCHz4xMrHR8965Y7XVrpDW6S4sixHNgmwdAjFfoV9UuShLFp1q2MoR2dYe1tV242K", - "ed25519:64TcaMasB83QH3c8vmEu23rmHvH31fuFkHicoDZjShSkDVVsNHTAMtTZUNFViXK8UCmVk9V7f4VueGEpMBhaebuV", - "ed25519:498ZydHjUzcCsdQuqatJEQRkpvdeYeUEwJEk4MifyDUWbw28Y9TVnQvWkMxssrd61FmLPDqn8wYD3HV2oVCx6Dhh", - null, - null, - "ed25519:5Kyn7MU1WKDy6FDQ91FTrq7m2JqemyK5oPKtPa2Dd8BMxLuCnJaCyk5Vfwzdm75fwEugExdskbF6Z1jAQuAeBErY", - "ed25519:5YpndkuRx7n4dRDZu5MMWNKjpP2q158hUbpHbgsX99wzQRrGeuFx1P8VRWZ8icHFPh9rS5xmgm1zN8TwBTfycFXJ" - ], - "block_merkle_root": "4y4aamanudLmTowpLk9GWRhhPNmjkEXm86ijVo5pkNZo", - "block_ordinal": 83036472, - "challenges_result": [], - "challenges_root": "11111111111111111111111111111111", - "chunk_headers_root": "5vABXV8RAo6GknauuQxngj1kn4PyMQH2rCTnKGYusscb", - "chunk_mask": [ - true, - true, - true, - true - ], - "chunk_receipts_root": "BcAYb4EV7BvmoMQdwXkx3UmDJReDiNjFUN3RAZWxBhDf", - "chunk_tx_root": "EZJB3GfAGiaUeW5mNwj5tMUfdvbZjQYMJxkwRwfEGCAo", - "chunks_included": 4, - "epoch_id": "EPL23Ar1bvVjULauPNbD8MjB9eDtoN6Ji7kmvpQVhCpE", - "epoch_sync_data_hash": null, - "gas_price": "100000000", - "hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "height": 93085141, - "last_ds_final_block": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "last_final_block": "5b9HLmwXNP78ozBeeM443Aq6Tzc8XcoQ23TBwieacmed", - "latest_protocol_version": 60, - "next_bp_hash": "nGcCQiF1mAwFWjbxqYFA7WsQyYDvLsUtTxhVkjySih8", - "next_epoch_id": "D6cyJc97ZjLR8NJ3h2Aj8KpRCVR3sAxVMRVrcS26JZN7", - "outcome_root": "AtgazpA7KNxya1PJyiBCESFyU1qt2kmnoHXf9zcvTEXo", - "prev_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_height": 93085140, - "prev_state_root": "HQKa9fiPa8HQHqT4a6huAEAFtACqp8kqUnbrxLUVaJ4h", - "random_value": "2e7HunUhxTe38JxkHnPqnJGGGiJnTG6JTvDqpKvRBsHT", - "rent_paid": "0", - "signature": "ed25519:5qEf65mY3grFyZ7NjkwtHkR4pYS5TTCHjc4Aw13gPjEXW2feDx6Y7N7iQ5Wa2FDrSQ4G6Tn2tDuNmERQbsp7Kbvf", - "timestamp": 1685481810212962600, - "timestamp_nanosec": "1685481810212962455", - "total_supply": "1137052953841874351313709602668185", - "validator_proposals": [], - "validator_reward": "0" - } - }, - "shards": [ - { - "chunk": { - "author": "legends.poolv1.near", - "header": { - "balance_burnt": "903157226440000000000", - "chunk_hash": "5bPAyMhwELc3KR4aKSc3cNBLGm32HFEqRUYXri43ipbH", - "encoded_length": 2773, - "encoded_merkle_root": "7yg9tcw7eA4o9V7NUy1gzdQ1bW4poTtMcjhX2df2T41W", - "gas_limit": 1000000000000000, - "gas_used": 21556415326900, - "height_created": 93085141, - "height_included": 93085141, - "outcome_root": "2WgvyuAvefXHw2Bu5tHBYqaNRnzEdkBV1kbX9rZhqHdR", - "outgoing_receipts_root": "FmmxRvexn9MaM6kaywm5TJ4bAXma9LC8GvX3BYMSbBPj", - "prev_block_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_state_root": "EgehqBxv1rs2143KmLDrbmyhZwHcHgZZwj5kjc48CLAn", - "rent_paid": "0", - "shard_id": 0, - "signature": "ed25519:5TQhvjHdmG4YMATrHYM4K96VRF6FRuu1LcrBG3WMFLEkHXo7gG2D3RGN2hnGMNVLosQqVGw91uMKfHvkNhe857Lq", - "tx_root": "5K8i8seBPYEKSXwsG9NugZmKhFmv7zgFbUAwqX7TNEfR", - "validator_proposals": [], - "validator_reward": "0" - }, - "receipts": [ - { - "predecessor_id": "app.nearcrowd.near", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "eyJhY2NvdW50X2lkIjoiYW5nZWxvay5uZWFyIiwic29sdXRpb25faGFzaCI6WzExMSwxMjEsMjQ0LDE3NSwxOCw2MSwxMTIsMTgsMTQ5LDI0NSwyMyw2OSwxMCw1NywyMzUsMywxNDksMjYsMjQ3LDIyNCw5NCwxOTksMjI5LDgxLDEyMSwxNzYsMjMyLDcsMTYsMTIxLDcxLDE2OV19", - "deposit": "0", - "gas": 200000000000000, - "method_name": "approve_solution" - } - } - ], - "gas_price": "335989893", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "app.nearcrowd.near", - "signer_public_key": "ed25519:CXYkSHvK2rj6sCGbaKPbTtwhcMrPvWxs1ntVvA6vLtm2" - } - }, - "receipt_id": "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n", - "receiver_id": "app.nearcrowd.near" - }, - { - "predecessor_id": "7e887c69ca5edd6eadfe7b87905a1c12d0ea5c8e6e6ae1a9659b74a43490d497", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "eyJyZWNlaXZlcl9pZCI6InJld2FyZC1vcHRpbi5zd2VhdCIsImFtb3VudCI6IjEwMDAwMDAwMDAwMDAwMDAwMCIsIm1lbW8iOiJzdzpyZXc6b3B0aW46WUdNNDN4eVc4UC03ZTg4N2M2OWNhNWVkZDZlYWRmZTdiODc5MDVhMWMxMmQwZWE1YzhlNmU2YWUxYTk2NTliNzRhNDM0OTBkNDk3In0=", - "deposit": "1", - "gas": 14000000000000, - "method_name": "ft_transfer" - } - } - ], - "gas_price": "109272700", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "7e887c69ca5edd6eadfe7b87905a1c12d0ea5c8e6e6ae1a9659b74a43490d497", - "signer_public_key": "ed25519:9Ww5a9UTdpEi1qYVFkv97E2Fvx88gqbVtnNTzCKrqvvJ" - } - }, - "receipt_id": "zGuoGbPEvvumUASBeui7VVneDh4Ft2TGaxUPj3mR2eG", - "receiver_id": "token.sweat" - }, - { - "predecessor_id": "17f374fb3e1e293f646627b869be7f63b3586ce417947e7f13275195f96cc8af", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "eyJyZWNlaXZlcl9pZCI6InJld2FyZC1vcHRpbi5zd2VhdCIsImFtb3VudCI6IjEwMDAwMDAwMDAwMDAwMDAwMCIsIm1lbW8iOiJzdzpyZXc6b3B0aW46WUdNNDN4eVc4UC0xN2YzNzRmYjNlMWUyOTNmNjQ2NjI3Yjg2OWJlN2Y2M2IzNTg2Y2U0MTc5NDdlN2YxMzI3NTE5NWY5NmNjOGFmIn0=", - "deposit": "1", - "gas": 14000000000000, - "method_name": "ft_transfer" - } - } - ], - "gas_price": "109272700", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "17f374fb3e1e293f646627b869be7f63b3586ce417947e7f13275195f96cc8af", - "signer_public_key": "ed25519:2cVh7bm8ibwH4VUoUJqGb1yrckq5HdFHkzHrW8inRBSn" - } - }, - "receipt_id": "Fp8WoevW4UaFfeXV6341E5gcnkvREwjKByUDgvo4PdQy", - "receiver_id": "token.sweat" - }, - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "12524843062500000000" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:Ed2Qp2whbMphnXayJU94jdSV3KeEejn9wk54FouFxxDZ" - } - }, - "receipt_id": "616WtYRqUTBG1axECm9d2doCxdmiNqGBpGDSWGh7w6ec", - "receiver_id": "sweat_welcome.near" - } - ], - "transactions": [ - { - "outcome": { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "DD4ZQawic8dWCmahMUYcAg7r9pUEn9ySwRXJUdpqnKLf", - "outcome": { - "executor_id": "6a24e779e81108ebeba2d424a49347999f6314383872479a164ef6a4c55213c7", - "gas_burnt": 2428312288450, - "logs": [], - "metadata": { - "gas_profile": null, - "version": 1 - }, - "receipt_ids": [ - "BcG3MXNSMFBdaKuwc8enhXBXTK4P9WohdKQTa1Myu8jR" - ], - "status": { - "SuccessReceiptId": "BcG3MXNSMFBdaKuwc8enhXBXTK4P9WohdKQTa1Myu8jR" - }, - "tokens_burnt": "242831228845000000000" - }, - "proof": [ - { - "direction": "Right", - "hash": "EMxw8DJ5wTGjs3RFCvbwT8j7ZAWisDvSUMfHhkoP2Pvh" - }, - { - "direction": "Right", - "hash": "6YgWkaQrFEybkbvN8Y6rCdJLwXS81UevfJdBE37TQgfM" - }, - { - "direction": "Right", - "hash": "EkrgUHptWkcbKXKYmu89MmMXKJbybLfbLMRhoGGmvt7v" - }, - { - "direction": "Right", - "hash": "7PZRbMCXzTZiGsEiEqRBNnq8m5JGmuEQq9yiZ95d5ySX" - } - ] - }, - "receipt": null - }, - "transaction": { - "actions": [ - { - "FunctionCall": { - "args": "eyJyZWNlaXZlcl9pZCI6InJld2FyZC1vcHRpbi5zd2VhdCIsImFtb3VudCI6IjEwMDAwMDAwMDAwMDAwMDAwMCIsIm1lbW8iOiJzdzpyZXc6b3B0aW46WUdNNDN4eVc4UC02YTI0ZTc3OWU4MTEwOGViZWJhMmQ0MjRhNDkzNDc5OTlmNjMxNDM4Mzg3MjQ3OWExNjRlZjZhNGM1NTIxM2M3In0=", - "deposit": "1", - "gas": 14000000000000, - "method_name": "ft_transfer" - } - } - ], - "hash": "DD4ZQawic8dWCmahMUYcAg7r9pUEn9ySwRXJUdpqnKLf", - "nonce": 64846206000026, - "public_key": "ed25519:89LrYd5LjETg4vBgpEcD5h9NmEDLeceCcS8ZsDC8MogA", - "receiver_id": "token.sweat", - "signature": "ed25519:4hoqDdWrnB7BXxnErZ6GtYtxDMUoXcwDg7w7h1ef6PeyZ6k6XDUJPoDYqEYPrYRCXr54TzuY8uKMiYCMvjLX5pTf", - "signer_id": "6a24e779e81108ebeba2d424a49347999f6314383872479a164ef6a4c55213c7" - } - }, - { - "outcome": { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "76kuoHMchbcdmHTbCcg8AtsoPDfcXZ8cXvM85Kdp7Kyn", - "outcome": { - "executor_id": "6ad20a76a405bdae35d6fe2050725d44f055de9d0305b027acd2bb36c490f40d", - "gas_burnt": 2428312288450, - "logs": [], - "metadata": { - "gas_profile": null, - "version": 1 - }, - "receipt_ids": [ - "FL2yvCEjhCcgj7WqAFac4fAbYdLW5mMHdUdZjfLBCj7a" - ], - "status": { - "SuccessReceiptId": "FL2yvCEjhCcgj7WqAFac4fAbYdLW5mMHdUdZjfLBCj7a" - }, - "tokens_burnt": "242831228845000000000" - }, - "proof": [ - { - "direction": "Left", - "hash": "BRS7TNvamzU7XtqVkWnUj7Tj49JeRmA93LzWKyAMAZhy" - }, - { - "direction": "Right", - "hash": "6YgWkaQrFEybkbvN8Y6rCdJLwXS81UevfJdBE37TQgfM" - }, - { - "direction": "Right", - "hash": "EkrgUHptWkcbKXKYmu89MmMXKJbybLfbLMRhoGGmvt7v" - }, - { - "direction": "Right", - "hash": "7PZRbMCXzTZiGsEiEqRBNnq8m5JGmuEQq9yiZ95d5ySX" - } - ] - }, - "receipt": null - }, - "transaction": { - "actions": [ - { - "FunctionCall": { - "args": "eyJyZWNlaXZlcl9pZCI6InJld2FyZC1vcHRpbi5zd2VhdCIsImFtb3VudCI6IjEwMDAwMDAwMDAwMDAwMDAwMCIsIm1lbW8iOiJzdzpyZXc6b3B0aW46Mm1CWDlHMDR3di02YWQyMGE3NmE0MDViZGFlMzVkNmZlMjA1MDcyNWQ0NGYwNTVkZTlkMDMwNWIwMjdhY2QyYmIzNmM0OTBmNDBkIn0=", - "deposit": "1", - "gas": 14000000000000, - "method_name": "ft_transfer" - } - } - ], - "hash": "76kuoHMchbcdmHTbCcg8AtsoPDfcXZ8cXvM85Kdp7Kyn", - "nonce": 71319939000056, - "public_key": "ed25519:8ByygDeLtYPYEXYP6SYkHT9Gbb118aiMc2D7EJuCMtkL", - "receiver_id": "token.sweat", - "signature": "ed25519:fJaGpdVi1j2hxgdcgDKhbKUgnV1t2BH9uSmq4ibPgVCSftfRZhhQs3PsKDEETFDFQdjigueniVZ6Pb6mcaFRBoy", - "signer_id": "6ad20a76a405bdae35d6fe2050725d44f055de9d0305b027acd2bb36c490f40d" - } - }, - { - "outcome": { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "5sy31rpp1ZtKhPFSUoEkbsAfdL3irFkRvDzStKc5em2F", - "outcome": { - "executor_id": "37e1d65580d2a44923bce44babb0f32d6a4280547a4e89e69718a61c42c120f9", - "gas_burnt": 2428314524384, - "logs": [], - "metadata": { - "gas_profile": null, - "version": 1 - }, - "receipt_ids": [ - "CyZ6aPkczSi3oQcDgnris3oYMYbWn9nGkp4PRHee9XAm" - ], - "status": { - "SuccessReceiptId": "CyZ6aPkczSi3oQcDgnris3oYMYbWn9nGkp4PRHee9XAm" - }, - "tokens_burnt": "242831452438400000000" - }, - "proof": [ - { - "direction": "Right", - "hash": "61UwP8PVZ7wf7uTcf6iADcgRsn9UHWC1XMGF4WXZ3AGW" - }, - { - "direction": "Left", - "hash": "De74QDTDJ9onAC61rkQrWwyCR6cRK6R1k8eWNChzQfAG" - }, - { - "direction": "Right", - "hash": "EkrgUHptWkcbKXKYmu89MmMXKJbybLfbLMRhoGGmvt7v" - }, - { - "direction": "Right", - "hash": "7PZRbMCXzTZiGsEiEqRBNnq8m5JGmuEQq9yiZ95d5ySX" - } - ] - }, - "receipt": null - }, - "transaction": { - "actions": [ - { - "FunctionCall": { - "args": "eyJyZWNlaXZlcl9pZCI6InJld2FyZC1vcHRpbi5zd2VhdCIsImFtb3VudCI6IjEwMDAwMDAwMDAwMDAwMDAwMDAiLCJtZW1vIjoic3c6cmV3Om9wdGluOnJlb1dxeEU0YVEtMzdlMWQ2NTU4MGQyYTQ0OTIzYmNlNDRiYWJiMGYzMmQ2YTQyODA1NDdhNGU4OWU2OTcxOGE2MWM0MmMxMjBmOSJ9", - "deposit": "1", - "gas": 14000000000000, - "method_name": "ft_transfer" - } - } - ], - "hash": "5sy31rpp1ZtKhPFSUoEkbsAfdL3irFkRvDzStKc5em2F", - "nonce": 85569677000013, - "public_key": "ed25519:7RtBV7grEag56CAfhC1gcQAt65QhJdxE65Cixw2QC2Ls", - "receiver_id": "token.sweat", - "signature": "ed25519:4N8hgZjwv9JpL2GodnCwyjFTdubEths7H2xis81GzUFEgv7d6y6hjQG2rk3yvjNrTCC6npvfauXGQVeoSy9gA6kx", - "signer_id": "37e1d65580d2a44923bce44babb0f32d6a4280547a4e89e69718a61c42c120f9" - } - }, - { - "outcome": { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "HwDUCUs3zts1s13UJaSH8Qbzj8fyvgURAYkaPH2KKq2o", - "outcome": { - "executor_id": "app.nearcrowd.near", - "gas_burnt": 2428312288450, - "logs": [], - "metadata": { - "gas_profile": null, - "version": 1 - }, - "receipt_ids": [ - "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n" - ], - "status": { - "SuccessReceiptId": "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n" - }, - "tokens_burnt": "242831228845000000000" - }, - "proof": [ - { - "direction": "Left", - "hash": "2noCGDgAPNyXJ6ZaSWbh5Y4xGrWDUUtapygE8j5sfPnv" - }, - { - "direction": "Left", - "hash": "De74QDTDJ9onAC61rkQrWwyCR6cRK6R1k8eWNChzQfAG" - }, - { - "direction": "Right", - "hash": "EkrgUHptWkcbKXKYmu89MmMXKJbybLfbLMRhoGGmvt7v" - }, - { - "direction": "Right", - "hash": "7PZRbMCXzTZiGsEiEqRBNnq8m5JGmuEQq9yiZ95d5ySX" - } - ] - }, - "receipt": null - }, - "transaction": { - "actions": [ - { - "FunctionCall": { - "args": "eyJhY2NvdW50X2lkIjoiYW5nZWxvay5uZWFyIiwic29sdXRpb25faGFzaCI6WzExMSwxMjEsMjQ0LDE3NSwxOCw2MSwxMTIsMTgsMTQ5LDI0NSwyMyw2OSwxMCw1NywyMzUsMywxNDksMjYsMjQ3LDIyNCw5NCwxOTksMjI5LDgxLDEyMSwxNzYsMjMyLDcsMTYsMTIxLDcxLDE2OV19", - "deposit": "0", - "gas": 200000000000000, - "method_name": "approve_solution" - } - } - ], - "hash": "HwDUCUs3zts1s13UJaSH8Qbzj8fyvgURAYkaPH2KKq2o", - "nonce": 43616777844741, - "public_key": "ed25519:CXYkSHvK2rj6sCGbaKPbTtwhcMrPvWxs1ntVvA6vLtm2", - "receiver_id": "app.nearcrowd.near", - "signature": "ed25519:4tgN6qkmvGsHEFjmPkKDtDxT62XG1Xx2GZE1dr4eGE2KjBbpM6BFNQwkmuihXoWdmq5ZWkMLHC5A5Sqvywncpc5K", - "signer_id": "app.nearcrowd.near" - } - } - ] - }, - "receipt_execution_outcomes": [ - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n", - "outcome": { - "executor_id": "app.nearcrowd.near", - "gas_burnt": 3300131924827, - "logs": [], - "metadata": { - "gas_profile": [ - { - "cost": "BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3177217332" - }, - { - "cost": "CONTRACT_LOADING_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "35445963" - }, - { - "cost": "CONTRACT_LOADING_BYTES", - "cost_category": "WASM_HOST_COST", - "gas_used": "104961404250" - }, - { - "cost": "READ_CACHED_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "86640000000" - }, - { - "cost": "READ_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "13049316000" - }, - { - "cost": "READ_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "307907973" - }, - { - "cost": "READ_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "7551495558" - }, - { - "cost": "READ_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "19613838" - }, - { - "cost": "STORAGE_READ_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "56356845750" - }, - { - "cost": "STORAGE_READ_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "154762665" - }, - { - "cost": "STORAGE_READ_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "123442110" - }, - { - "cost": "STORAGE_WRITE_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "128393472000" - }, - { - "cost": "STORAGE_WRITE_EVICTED_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "706580754" - }, - { - "cost": "STORAGE_WRITE_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1550623074" - }, - { - "cost": "STORAGE_WRITE_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1675001106" - }, - { - "cost": "TOUCHING_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "418650854076" - }, - { - "cost": "WASM_INSTRUCTION", - "cost_category": "WASM_HOST_COST", - "gas_used": "24362627916" - }, - { - "cost": "WRITE_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "11215179444" - }, - { - "cost": "WRITE_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "585610980" - }, - { - "cost": "WRITE_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "11462089944" - }, - { - "cost": "WRITE_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "840145644" - } - ], - "version": 3 - }, - "receipt_ids": [ - "FuocYXxdpnGgFRPv89PUUeJADFFHoHPyZfrRQgwKPUQi" - ], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "330013192482700000000" - }, - "proof": [ - { - "direction": "Right", - "hash": "4YAGJgYSR4UL7fMv4SaMrq69Bnurg5YvpfJaQyYVwKoC" - }, - { - "direction": "Right", - "hash": "HS8ZdkzE2ZxAfzmgF79AxTAMCJJ9PQBWkKzzp5NwKRpo" - }, - { - "direction": "Left", - "hash": "3ANUWAfdSBpbNozdTRgEmyP5zqyuyqfBq1MwHoLabqoZ" - }, - { - "direction": "Right", - "hash": "7PZRbMCXzTZiGsEiEqRBNnq8m5JGmuEQq9yiZ95d5ySX" - } - ] - }, - "receipt": { - "predecessor_id": "app.nearcrowd.near", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "eyJhY2NvdW50X2lkIjoiYW5nZWxvay5uZWFyIiwic29sdXRpb25faGFzaCI6WzExMSwxMjEsMjQ0LDE3NSwxOCw2MSwxMTIsMTgsMTQ5LDI0NSwyMyw2OSwxMCw1NywyMzUsMywxNDksMjYsMjQ3LDIyNCw5NCwxOTksMjI5LDgxLDEyMSwxNzYsMjMyLDcsMTYsMTIxLDcxLDE2OV19", - "deposit": "0", - "gas": 200000000000000, - "method_name": "approve_solution" - } - } - ], - "gas_price": "335989893", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "app.nearcrowd.near", - "signer_public_key": "ed25519:CXYkSHvK2rj6sCGbaKPbTtwhcMrPvWxs1ntVvA6vLtm2" - } - }, - "receipt_id": "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n", - "receiver_id": "app.nearcrowd.near" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "BiijgyfTANtByLAU1MUCXAUmiUSaNRbJ4GotMyGg54bC", - "outcome": { - "executor_id": "7f2a4588f275fa492661c9f8894dfe8b9c949fb58b5c799898ff780b6f6790f2", - "gas_burnt": 4174947687500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [ - "CXR8fS6gsf6NDi4m2NsNtAXaRcVbExANbEwvYVSXxkxx" - ], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "417494768750000000000" - }, - "proof": [ - { - "direction": "Left", - "hash": "G1jQj4Mb1FtHCXnMVHzoded6M7pgBc7fLvAHWG2ornLL" - }, - { - "direction": "Right", - "hash": "HS8ZdkzE2ZxAfzmgF79AxTAMCJJ9PQBWkKzzp5NwKRpo" - }, - { - "direction": "Left", - "hash": "3ANUWAfdSBpbNozdTRgEmyP5zqyuyqfBq1MwHoLabqoZ" - }, - { - "direction": "Right", - "hash": "7PZRbMCXzTZiGsEiEqRBNnq8m5JGmuEQq9yiZ95d5ySX" - } - ] - }, - "receipt": { - "predecessor_id": "sweat_welcome.near", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "50000000000000000000000" - } - } - ], - "gas_price": "103000000", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:4AHsaAFYC2xdLmxHJ4jrD4dYrC1nhSTWA3aUJkGiSHwo" - } - }, - "receipt_id": "BiijgyfTANtByLAU1MUCXAUmiUSaNRbJ4GotMyGg54bC", - "receiver_id": "7f2a4588f275fa492661c9f8894dfe8b9c949fb58b5c799898ff780b6f6790f2" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "6NNRshJfwuZYJvxXS1JCFMZXCjYd2GdK6gLgeE85FJqK", - "outcome": { - "executor_id": "559943f15e74939ddeb799d684a9c05ef1d96a4bb40314e90c6a45b381c92c88", - "gas_burnt": 4174947687500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Right", - "hash": "9HZzbir1LE5sss6x1siinvDEh4ypZnfiTG4efg96FQ5a" - }, - { - "direction": "Left", - "hash": "C7rcybGYQXgr38952JuYa68EJBhXqKjgMsHm2nZNSuX4" - }, - { - "direction": "Left", - "hash": "3ANUWAfdSBpbNozdTRgEmyP5zqyuyqfBq1MwHoLabqoZ" - }, - { - "direction": "Right", - "hash": "7PZRbMCXzTZiGsEiEqRBNnq8m5JGmuEQq9yiZ95d5ySX" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "1434895483223091390800" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "559943f15e74939ddeb799d684a9c05ef1d96a4bb40314e90c6a45b381c92c88", - "signer_public_key": "ed25519:5gCG5Czt7ZsqELQVxEAEGL4eq8e75Y2wd52Fs96FsnN2" - } - }, - "receipt_id": "6NNRshJfwuZYJvxXS1JCFMZXCjYd2GdK6gLgeE85FJqK", - "receiver_id": "559943f15e74939ddeb799d684a9c05ef1d96a4bb40314e90c6a45b381c92c88" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "6r6vy6jeNLXJ35JhJb8yUsJHMebP8SnZwNQjPRfcJ38L", - "outcome": { - "executor_id": "aea0194936450e30a33909b750b514df4702afeb68d458dbc52ce03306dc0286", - "gas_burnt": 4174947687500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Left", - "hash": "AMLmKfYKBtKkHetmKFbwqxfwp2RC9TBveCz9PJsphFgi" - }, - { - "direction": "Left", - "hash": "C7rcybGYQXgr38952JuYa68EJBhXqKjgMsHm2nZNSuX4" - }, - { - "direction": "Left", - "hash": "3ANUWAfdSBpbNozdTRgEmyP5zqyuyqfBq1MwHoLabqoZ" - }, - { - "direction": "Right", - "hash": "7PZRbMCXzTZiGsEiEqRBNnq8m5JGmuEQq9yiZ95d5ySX" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "1430867781039410315000" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "aea0194936450e30a33909b750b514df4702afeb68d458dbc52ce03306dc0286", - "signer_public_key": "ed25519:CkfXqE6dQnQSqSLyND7YobfaqNpRaoNHsVFeKRFCb1Wu" - } - }, - "receipt_id": "6r6vy6jeNLXJ35JhJb8yUsJHMebP8SnZwNQjPRfcJ38L", - "receiver_id": "aea0194936450e30a33909b750b514df4702afeb68d458dbc52ce03306dc0286" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "3WKf2WSBkJJr1G3fF9XEHMde672FbPWiCLQyEktfbBfR", - "outcome": { - "executor_id": "2f82783e48caca533db368aad9da6dd9f92374bffd008245b94a9417c66ae34f", - "gas_burnt": 4174947687500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Right", - "hash": "AVmTabtkwN12p3LpzHbTRuERiJinJNjjRBC31saSrfLQ" - }, - { - "direction": "Left", - "hash": "9PkGgoga8zM8986urpYRg2KzWgLzLocMSBGgWtK6Dwnt" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "1457218832396810315000" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "2f82783e48caca533db368aad9da6dd9f92374bffd008245b94a9417c66ae34f", - "signer_public_key": "ed25519:4CTYtj8RMfo2qJFWMzSaVSfft1FuoLGKnUESbGxnR3BL" - } - }, - "receipt_id": "3WKf2WSBkJJr1G3fF9XEHMde672FbPWiCLQyEktfbBfR", - "receiver_id": "2f82783e48caca533db368aad9da6dd9f92374bffd008245b94a9417c66ae34f" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "outcome": { - "executor_id": "app.nearcrowd.near", - "gas_burnt": 4281737624379, - "logs": [], - "metadata": { - "gas_profile": [ - { - "cost": "BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "9266883885" - }, - { - "cost": "CONTRACT_LOADING_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "35445963" - }, - { - "cost": "CONTRACT_LOADING_BYTES", - "cost_category": "WASM_HOST_COST", - "gas_used": "104961404250" - }, - { - "cost": "READ_CACHED_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "383040000000" - }, - { - "cost": "READ_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "31318358400" - }, - { - "cost": "READ_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1566149196" - }, - { - "cost": "READ_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "25171651860" - }, - { - "cost": "READ_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "59531448" - }, - { - "cost": "STORAGE_HAS_KEY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "54039896625" - }, - { - "cost": "STORAGE_HAS_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "646607745" - }, - { - "cost": "STORAGE_READ_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "169070537250" - }, - { - "cost": "STORAGE_READ_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2507155173" - }, - { - "cost": "STORAGE_READ_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1279309140" - }, - { - "cost": "STORAGE_REMOVE_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "53473030500" - }, - { - "cost": "STORAGE_REMOVE_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "535085376" - }, - { - "cost": "STORAGE_REMOVE_RET_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "380541348" - }, - { - "cost": "STORAGE_WRITE_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "192590208000" - }, - { - "cost": "STORAGE_WRITE_EVICTED_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "7001572926" - }, - { - "cost": "STORAGE_WRITE_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2819314680" - }, - { - "cost": "STORAGE_WRITE_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "7785653289" - }, - { - "cost": "TOUCHING_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "692384104818" - }, - { - "cost": "WASM_INSTRUCTION", - "cost_category": "WASM_HOST_COST", - "gas_used": "50254759236" - }, - { - "cost": "WRITE_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "30841743471" - }, - { - "cost": "WRITE_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1688738640" - }, - { - "cost": "WRITE_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "28655224860" - }, - { - "cost": "WRITE_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2296144656" - } - ], - "version": 3 - }, - "receipt_ids": [ - "FTDicsTMMGMFMmdun4kJphR4Xjix6H6dfot4LwAmdZWU" - ], - "status": { - "SuccessValue": "ZmFsc2U=" - }, - "tokens_burnt": "428173762437900000000" - }, - "proof": [ - { - "direction": "Left", - "hash": "HysEXBQ3bXt1yoBvoUVD6jn1z8mev4N7RfnJ4JnhNuDw" - }, - { - "direction": "Left", - "hash": "9PkGgoga8zM8986urpYRg2KzWgLzLocMSBGgWtK6Dwnt" - } - ] - }, - "receipt": { - "predecessor_id": "gareva.near", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "eyJ0YXNrX29yZGluYWwiOjEsImJpZCI6IjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn0=", - "deposit": "0", - "gas": 30000000000000, - "method_name": "claim_assignment" - } - } - ], - "gas_price": "122987387", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "gareva.near", - "signer_public_key": "ed25519:6HwxDN5HEK1nphYuBGHQVLTPpbtgSJYBupwi8qACunjQ" - } - }, - "receipt_id": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "receiver_id": "app.nearcrowd.near" - } - } - ], - "shard_id": 0, - "state_changes": [ - { - "cause": { - "receipt_hash": "3WKf2WSBkJJr1G3fF9XEHMde672FbPWiCLQyEktfbBfR", - "type": "receipt_processing" - }, - "change": { - "account_id": "2f82783e48caca533db368aad9da6dd9f92374bffd008245b94a9417c66ae34f", - "amount": "74351083352347299999967", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 182 - }, - "type": "account_update" - }, - { - "cause": { - "tx_hash": "5sy31rpp1ZtKhPFSUoEkbsAfdL3irFkRvDzStKc5em2F", - "type": "transaction_processing" - }, - "change": { - "account_id": "37e1d65580d2a44923bce44babb0f32d6a4280547a4e89e69718a61c42c120f9", - "amount": "25163340743040644483170", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 182 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "6NNRshJfwuZYJvxXS1JCFMZXCjYd2GdK6gLgeE85FJqK", - "type": "receipt_processing" - }, - "change": { - "account_id": "559943f15e74939ddeb799d684a9c05ef1d96a4bb40314e90c6a45b381c92c88", - "amount": "1786929249419117499999905", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 182 - }, - "type": "account_update" - }, - { - "cause": { - "tx_hash": "DD4ZQawic8dWCmahMUYcAg7r9pUEn9ySwRXJUdpqnKLf", - "type": "transaction_processing" - }, - "change": { - "account_id": "6a24e779e81108ebeba2d424a49347999f6314383872479a164ef6a4c55213c7", - "amount": "29150571014554489684977", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 182 - }, - "type": "account_update" - }, - { - "cause": { - "tx_hash": "76kuoHMchbcdmHTbCcg8AtsoPDfcXZ8cXvM85Kdp7Kyn", - "type": "transaction_processing" - }, - "change": { - "account_id": "6ad20a76a405bdae35d6fe2050725d44f055de9d0305b027acd2bb36c490f40d", - "amount": "44473025034048889684962", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 182 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "BiijgyfTANtByLAU1MUCXAUmiUSaNRbJ4GotMyGg54bC", - "type": "receipt_processing" - }, - "change": { - "account_id": "7f2a4588f275fa492661c9f8894dfe8b9c949fb58b5c799898ff780b6f6790f2", - "amount": "50000000000000000000000", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 182 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "6r6vy6jeNLXJ35JhJb8yUsJHMebP8SnZwNQjPRfcJ38L", - "type": "receipt_processing" - }, - "change": { - "account_id": "aea0194936450e30a33909b750b514df4702afeb68d458dbc52ce03306dc0286", - "amount": "62488762692101899999939", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 182 - }, - "type": "account_update" - }, - { - "cause": { - "tx_hash": "HwDUCUs3zts1s13UJaSH8Qbzj8fyvgURAYkaPH2KKq2o", - "type": "transaction_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "amount": "3864979577342348747179783769", - "code_hash": "DyHG2t99dBZWiPgX53Z4UbbBQR6JJoxmqXwaKD4hTeyP", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 4525592 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n", - "type": "receipt_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "amount": "3864979577342348747179783769", - "code_hash": "DyHG2t99dBZWiPgX53Z4UbbBQR6JJoxmqXwaKD4hTeyP", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 4525681 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n", - "type": "action_receipt_gas_reward" - }, - "change": { - "account_id": "app.nearcrowd.near", - "amount": "3864979603496937838479783769", - "code_hash": "DyHG2t99dBZWiPgX53Z4UbbBQR6JJoxmqXwaKD4hTeyP", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 4525681 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "type": "receipt_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "amount": "3864979603496937838479783769", - "code_hash": "DyHG2t99dBZWiPgX53Z4UbbBQR6JJoxmqXwaKD4hTeyP", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 4525627 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "type": "action_receipt_gas_reward" - }, - "change": { - "account_id": "app.nearcrowd.near", - "amount": "3864979659107009420479783769", - "code_hash": "DyHG2t99dBZWiPgX53Z4UbbBQR6JJoxmqXwaKD4hTeyP", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 4525627 - }, - "type": "account_update" - }, - { - "cause": { - "tx_hash": "5sy31rpp1ZtKhPFSUoEkbsAfdL3irFkRvDzStKc5em2F", - "type": "transaction_processing" - }, - "change": { - "access_key": { - "nonce": 85569677000013, - "permission": "FullAccess" - }, - "account_id": "37e1d65580d2a44923bce44babb0f32d6a4280547a4e89e69718a61c42c120f9", - "public_key": "ed25519:7RtBV7grEag56CAfhC1gcQAt65QhJdxE65Cixw2QC2Ls" - }, - "type": "access_key_update" - }, - { - "cause": { - "tx_hash": "DD4ZQawic8dWCmahMUYcAg7r9pUEn9ySwRXJUdpqnKLf", - "type": "transaction_processing" - }, - "change": { - "access_key": { - "nonce": 64846206000026, - "permission": "FullAccess" - }, - "account_id": "6a24e779e81108ebeba2d424a49347999f6314383872479a164ef6a4c55213c7", - "public_key": "ed25519:89LrYd5LjETg4vBgpEcD5h9NmEDLeceCcS8ZsDC8MogA" - }, - "type": "access_key_update" - }, - { - "cause": { - "tx_hash": "76kuoHMchbcdmHTbCcg8AtsoPDfcXZ8cXvM85Kdp7Kyn", - "type": "transaction_processing" - }, - "change": { - "access_key": { - "nonce": 71319939000056, - "permission": "FullAccess" - }, - "account_id": "6ad20a76a405bdae35d6fe2050725d44f055de9d0305b027acd2bb36c490f40d", - "public_key": "ed25519:8ByygDeLtYPYEXYP6SYkHT9Gbb118aiMc2D7EJuCMtkL" - }, - "type": "access_key_update" - }, - { - "cause": { - "receipt_hash": "BiijgyfTANtByLAU1MUCXAUmiUSaNRbJ4GotMyGg54bC", - "type": "receipt_processing" - }, - "change": { - "access_key": { - "nonce": 93085140000000, - "permission": "FullAccess" - }, - "account_id": "7f2a4588f275fa492661c9f8894dfe8b9c949fb58b5c799898ff780b6f6790f2", - "public_key": "ed25519:9ZQASqHFBjk87rUX6mQWq75KpwzRGPZa5aZdqa9Ydidw" - }, - "type": "access_key_update" - }, - { - "cause": { - "tx_hash": "HwDUCUs3zts1s13UJaSH8Qbzj8fyvgURAYkaPH2KKq2o", - "type": "transaction_processing" - }, - "change": { - "access_key": { - "nonce": 43616777844741, - "permission": "FullAccess" - }, - "account_id": "app.nearcrowd.near", - "public_key": "ed25519:CXYkSHvK2rj6sCGbaKPbTtwhcMrPvWxs1ntVvA6vLtm2" - }, - "type": "access_key_update" - }, - { - "cause": { - "receipt_hash": "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n", - "type": "receipt_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "key_base64": "U1RBVEU=", - "value_base64": "EgAAAGFwcC5uZWFyY3Jvd2QubmVhcg==" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "DwVQmRqaeHiMwRESakJhp2jdYbq5ATLwa5BdKQtaek8n", - "type": "receipt_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "key_base64": "YQwAAABhbmdlbG9rLm5lYXI=", - "value_base64": "b3n0rxI9cBKV9RdFCjnrA5Ua9+Bex+VRebDoBxB5R6k=" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "type": "receipt_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "key_base64": "cAEAAAA=", - "value_base64": "AABAe6XwY4GWCgAAAAAAAAAA9ESCkWNFAAAAAAAAAAAsAQAAAAAAAAAAQHul8GOBlgoAAAAAAADVO2wmxwhkFzS5vAAAAAAABgAAAHQBAAAAYtsHvQAAAAAABgAAAHQBAAAAYlUBAAAAAAAABgAAAHQBAAAAYwYAAAB0AQAAAGUGAAAAdAEAAABmBgAAAHQBAAAAZwEGAAAAdAEAAABtAA==" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "type": "receipt_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "key_base64": "dAEAAABjDgAAAAAAAAA=", - "value_base64": "TvSunjRFxs/AAT2jxNX9gFrnn50m1Az2G6nwWYMtWBIE" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "type": "receipt_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "key_base64": "dAEAAABjVQEAAAAAAAA=" - }, - "type": "data_deletion" - }, - { - "cause": { - "receipt_hash": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "type": "receipt_processing" - }, - "change": { - "account_id": "app.nearcrowd.near", - "key_base64": "dAEAAABnCwAAAGdhcmV2YS5uZWFy", - "value_base64": "A7Y3MCuQR8kni5KMpBaBmDw7qDbsfdTJ34jCRgWtDWY1AZdAIL3GCGQXAACgvVL4sUBLBQAAAAAAAA==" - }, - "type": "data_update" - } - ] - }, - { - "chunk": { - "author": "neardevgov.poolv1.near", - "header": { - "balance_burnt": "336955792883000000000", - "chunk_hash": "4K9Zj1ZanDm9Cu3G4JnRWsCTPjhT7iMsb2m1ACNexvPZ", - "encoded_length": 161, - "encoded_merkle_root": "ExpvgdXmijmisL9VWUSZd6cH2XZ8KjMfvRq2TFXwWaJ", - "gas_limit": 1000000000000000, - "gas_used": 3772355756216, - "height_created": 93085141, - "height_included": 93085141, - "outcome_root": "35sKVEqAvGiAddvByfoFNyJz7DF5AYWaPnLPGqqvwi3s", - "outgoing_receipts_root": "DaAh9aGfy8hrRkSPa8VajKr4JG6eivSGognFYQXuezTG", - "prev_block_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_state_root": "9D5KaP2ZukXZR5SKAXgU9cuq5niDuvpjrbCXofAzy4ow", - "rent_paid": "0", - "shard_id": 1, - "signature": "ed25519:3thVBMZWNUgwdLsNtm2hfHF2MrHhovjN9aQQJAi7uNicKw8eUyLjbcpwVMorQ6uT9JbK1GJbto9m1XWF5XNr96LW", - "tx_root": "11111111111111111111111111111111", - "validator_proposals": [], - "validator_reward": "0" - }, - "receipts": [ - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "188653474442246325537704" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "relay.aurora", - "signer_public_key": "ed25519:DHJZ82oYW3skfV8PJPPGQ583dcrp5Qc6aP6hJYePGWp1" - } - }, - "receipt_id": "4TbBhk5HrKbL7m6Jvkw8R7W6hsx38cGTEqtnbysjwG9t", - "receiver_id": "relay.aurora" - } - ], - "transactions": [] - }, - "receipt_execution_outcomes": [ - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "outcome": { - "executor_id": "aurora", - "gas_burnt": 8169280906812, - "logs": [ - "signer_address Address(0xf2f3776b9f69a9302c897aec26b59027e01d36cc)", - "total_writes_count 3\ntotal_written_bytes 96" - ], - "metadata": { - "gas_profile": [ - { - "cost": "BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "24093898101" - }, - { - "cost": "CONTRACT_LOADING_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "35445963" - }, - { - "cost": "CONTRACT_LOADING_BYTES", - "cost_category": "WASM_HOST_COST", - "gas_used": "215483313000" - }, - { - "cost": "ECRECOVER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "278821988457" - }, - { - "cost": "KECCAK256_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "17638473825" - }, - { - "cost": "KECCAK256_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "4766585310" - }, - { - "cost": "LOG_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "7086626100" - }, - { - "cost": "LOG_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1438668219" - }, - { - "cost": "READ_CACHED_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "467400000000" - }, - { - "cost": "READ_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "107004391200" - }, - { - "cost": "READ_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "5979496809" - }, - { - "cost": "READ_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "70480625208" - }, - { - "cost": "READ_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "826343808" - }, - { - "cost": "STORAGE_READ_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1239850606500" - }, - { - "cost": "STORAGE_READ_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "19809621120" - }, - { - "cost": "STORAGE_READ_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "44686043820" - }, - { - "cost": "STORAGE_WRITE_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "385180416000" - }, - { - "cost": "STORAGE_WRITE_EVICTED_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "6166522944" - }, - { - "cost": "STORAGE_WRITE_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "14378504868" - }, - { - "cost": "STORAGE_WRITE_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "5955559488" - }, - { - "cost": "TOUCHING_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1255952562228" - }, - { - "cost": "UTF8_DECODING_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "6223558122" - }, - { - "cost": "UTF8_DECODING_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "31782272211" - }, - { - "cost": "WASM_INSTRUCTION", - "cost_category": "WASM_HOST_COST", - "gas_used": "1301441200092" - }, - { - "cost": "WRITE_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "75702461247" - }, - { - "cost": "WRITE_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "22661783040" - }, - { - "cost": "WRITE_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "97427764524" - }, - { - "cost": "WRITE_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "32602212864" - } - ], - "version": 3 - }, - "receipt_ids": [ - "E9czK4fNS8banNi9La7XhXVEpFtzYVjQxUdGocQ8pf7x" - ], - "status": { - "SuccessValue": "BwAAAAAADqsAAAAAAAABAAAAxuUYVDjhcwlZwe81UQWaP+x0TpAEAAAALUUjmMuLueXNreqr/gpdZr+Dq98xftVjOmRSj1vudFgAAAAAAAAAAAAAAADH6oGevwjl/0gdRwimAvkjgK+7CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKusA0AAAAAAAAAAAAAAAA8vN3a59pqTAsiXrsJrWQJ+AdNswAAAAA" - }, - "tokens_burnt": "816928090681200000000" - }, - "proof": [] - }, - "receipt": { - "predecessor_id": "relay.aurora", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "+NCDE+9ihAQsHYCDHoSAlMblGFQ44XMJWcHvNVEFmj/sdE6QgLhk9Otz1AAAAAAAAAAAAAAAAMfqgZ6/COX/SB1HCKYC+SOAr7sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq6wDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZHZpJ4ScioLIoJjp4MmKXcnhylS3GYki1uvpHg8xwMblDaLwkSVXzQMCoCSmCbsMdGTFxPBCAdautus3bO0uFxVXiXY2YJaHHTyO", - "deposit": "0", - "gas": 300000000000000, - "method_name": "submit" - } - } - ], - "gas_price": "625040174", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "relay.aurora", - "signer_public_key": "ed25519:6gNHGeifK61KjBgW2Pn6NyQJyw9xgP4uLQgr1NrKQjhK" - } - }, - "receipt_id": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "receiver_id": "aurora" - } - } - ], - "shard_id": 1, - "state_changes": [ - { - "cause": { - "receipt_hash": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "type": "receipt_processing" - }, - "change": { - "account_id": "aurora", - "amount": "63666262831378951240605883273", - "code_hash": "d4saiJUZuaKVUzbr5MtEPdh7Z4415hz9tHidvLEyv71", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 6366140096 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "type": "action_receipt_gas_reward" - }, - "change": { - "account_id": "aurora", - "amount": "63666263003605259592605883273", - "code_hash": "d4saiJUZuaKVUzbr5MtEPdh7Z4415hz9tHidvLEyv71", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 6366140096 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "type": "receipt_processing" - }, - "change": { - "account_id": "aurora", - "key_base64": "BwHy83drn2mpMCyJeuwmtZAn4B02zA==", - "value_base64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT72M=" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "type": "receipt_processing" - }, - "change": { - "account_id": "aurora", - "key_base64": "BwJrGVnnAwPjNNfLV3IixilrwTL67Q==", - "value_base64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACB0TRn1GgNIA=" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "type": "receipt_processing" - }, - "change": { - "account_id": "aurora", - "key_base64": "BwLy83drn2mpMCyJeuwmtZAn4B02zA==", - "value_base64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPfGSn574A=" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "type": "receipt_processing" - }, - "change": { - "account_id": "aurora", - "key_base64": "BwTG5RhUOOFzCVnB7zVRBZo/7HROkAEAAACrT6haoUz6rrj0wWfgN4McXyqiaDCOWtdITu1+obYNbg==", - "value_base64": "ZHZoKxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq6wDQ=" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "type": "receipt_processing" - }, - "change": { - "account_id": "aurora", - "key_base64": "BwTG5RhUOOFzCVnB7zVRBZo/7HROkAEAAAC9VjXct4m74HWr3h+OjFeHYpCW/Nsq5KcvCYbMwr0TJQ==", - "value_base64": "AGR2aScAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq6wDQ=" - }, - "type": "data_update" - } - ] - }, - { - "chunk": { - "author": "astro-stakers.poolv1.near", - "header": { - "balance_burnt": "660301625914400000000", - "chunk_hash": "GWGFPyAvWLnHw4eo8XEUNz3EFpfogE4acJ13h8jorTT1", - "encoded_length": 701, - "encoded_merkle_root": "AVWEeygQLxnYMGREJmAQE4BDQwsg1FCJJ2dK2kWNh47W", - "gas_limit": 1000000000000000, - "gas_used": 7049381384144, - "height_created": 93085141, - "height_included": 93085141, - "outcome_root": "CxxEgz23MJKojjGWXe3muBjD6yiLCSo7NyGgfpu64aug", - "outgoing_receipts_root": "H96o6Z112kp4FgNm5rbpGxNCc53x4bbmcPce6NpaFMoK", - "prev_block_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_state_root": "5TztQJP7d3436iXmFpG5PSYAtNhz9mNYu7XJ8UyxDpQe", - "rent_paid": "0", - "shard_id": 2, - "signature": "ed25519:3eNQL7PXH96tb2LkkYdNrHJ8nB7PpGjCc98gsURvMMMifsWcjL48AM9AB1QWZFCFd61oiyGViKKKB8HSYom4z7jP", - "tx_root": "AWG7nTuyxSdtk5sEwGuB1mUmACnkAvGMn5zw8mbgXAFP", - "validator_proposals": [], - "validator_reward": "0" - }, - "receipts": [ - { - "predecessor_id": "gareva.near", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "eyJ0YXNrX29yZGluYWwiOjEsImJpZCI6IjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn0=", - "deposit": "0", - "gas": 30000000000000, - "method_name": "claim_assignment" - } - } - ], - "gas_price": "122987387", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "gareva.near", - "signer_public_key": "ed25519:6HwxDN5HEK1nphYuBGHQVLTPpbtgSJYBupwi8qACunjQ" - } - }, - "receipt_id": "AjPq8fHZqoAHQ5x6gMvYh86mrtM6DiybpwQf2LNrbRfD", - "receiver_id": "app.nearcrowd.near" - }, - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "12524843062500000000" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:7ehQMq5CxWinuNqbigdZ7dqNPAK4ZbJUj76SQ6xo23ia" - } - }, - "receipt_id": "HaT3ZccHwsEWnRJUBVuHqBetFNj2VkPpN3n3LEqsggBy", - "receiver_id": "sweat_welcome.near" - } - ], - "transactions": [ - { - "outcome": { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "3zuxLwgGW9eE3MzCMu5SdZRgJr57gFrgsdyPHTZSkSBJ", - "outcome": { - "executor_id": "beevaapaa.near", - "gas_burnt": 2428073043512, - "logs": [], - "metadata": { - "gas_profile": null, - "version": 1 - }, - "receipt_ids": [ - "CC1BqWcwshhYyfWYhByzsKPkuTDqNkEMZP14YmsiLzd8" - ], - "status": { - "SuccessReceiptId": "CC1BqWcwshhYyfWYhByzsKPkuTDqNkEMZP14YmsiLzd8" - }, - "tokens_burnt": "242807304351200000000" - }, - "proof": [] - }, - "receipt": null - }, - "transaction": { - "actions": [ - { - "FunctionCall": { - "args": "eyJ0YXNrX29yZGluYWwiOjEsImFwcHJvdmUiOnRydWUsInJlamVjdGlvbl9yZWFzb24iOiIifQ==", - "deposit": "0", - "gas": 80000000000000, - "method_name": "submit_review" - } - } - ], - "hash": "3zuxLwgGW9eE3MzCMu5SdZRgJr57gFrgsdyPHTZSkSBJ", - "nonce": 93048334000411, - "public_key": "ed25519:H3s8jBvjZ9t4CPHvWTvSrEAwB6cjNGraQJrFsifzqBJ1", - "receiver_id": "app.nearcrowd.near", - "signature": "ed25519:54dGecUBcyxMBnvK9k329nP8nx8z4R72GRbbYStUa2JntPEnVn39rrZNdZhwFcdVUmGgJFPshNypPVVboNULjMBH", - "signer_id": "beevaapaa.near" - } - } - ] - }, - "receipt_execution_outcomes": [], - "shard_id": 2, - "state_changes": [ - { - "cause": { - "tx_hash": "3zuxLwgGW9eE3MzCMu5SdZRgJr57gFrgsdyPHTZSkSBJ", - "type": "transaction_processing" - }, - "change": { - "account_id": "beevaapaa.near", - "amount": "1962568243503760945877158", - "code_hash": "7DcAdMUT1MjaZ9s7zhXdyxKvQsRsSfnmBGdzeZaquqDE", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 6892 - }, - "type": "account_update" - }, - { - "cause": { - "tx_hash": "3zuxLwgGW9eE3MzCMu5SdZRgJr57gFrgsdyPHTZSkSBJ", - "type": "transaction_processing" - }, - "change": { - "access_key": { - "nonce": 93048334000411, - "permission": { - "FunctionCall": { - "allowance": "106579422027617557348832", - "method_names": [], - "receiver_id": "app.nearcrowd.near" - } - } - }, - "account_id": "beevaapaa.near", - "public_key": "ed25519:H3s8jBvjZ9t4CPHvWTvSrEAwB6cjNGraQJrFsifzqBJ1" - }, - "type": "access_key_update" - } - ] - }, - { - "chunk": { - "author": "bzam6yjpnfnxsdmjf6pw.poolv1.near", - "header": { - "balance_burnt": "2290298267551700000000", - "chunk_hash": "6s29toMBxow7sNNf2huCzs9Jx77cuD4Ei6Q53FsJRV8e", - "encoded_length": 2884, - "encoded_merkle_root": "6e2PjAbKLmK3ZHMDuU6AGqbF7LuKXQrx8Ha9X5jtQT2m", - "gas_limit": 1000000000000000, - "gas_used": 25705493164532, - "height_created": 93085141, - "height_included": 93085141, - "outcome_root": "D14cNKyYmNfNrHkXAgdQREjf9sUdgBbretD8bTzzibup", - "outgoing_receipts_root": "DpPAKmARwUGBfYLDbXWPTL53auH3ingsvsFsj2MCwbe6", - "prev_block_hash": "2cHmVxWxsdwowimB5bX3kR9qXa3F8c1t7gbTrMV7hn69", - "prev_state_root": "98HzgR4qeCoV9R8KXw3i27HdQreH5o4j5VWmocxHh19A", - "rent_paid": "0", - "shard_id": 3, - "signature": "ed25519:2wvGjamXwpn3euAyv8Xr951ZJVzGeMJiMQ8cGTa6HwW986kfPe5YCFhMytaNLe74MxgpezX8Fy3ptRbaBiPZCPAk", - "tx_root": "4iRESwugTeYZzUeYs6VxbUQHvnX2UnBrY7yXRpB6fUyG", - "validator_proposals": [], - "validator_reward": "0" - }, - "receipts": [ - { - "predecessor_id": "sweat_welcome.near", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "50000000000000000000000" - } - } - ], - "gas_price": "103000000", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:4AHsaAFYC2xdLmxHJ4jrD4dYrC1nhSTWA3aUJkGiSHwo" - } - }, - "receipt_id": "BiijgyfTANtByLAU1MUCXAUmiUSaNRbJ4GotMyGg54bC", - "receiver_id": "7f2a4588f275fa492661c9f8894dfe8b9c949fb58b5c799898ff780b6f6790f2" - }, - { - "predecessor_id": "relay.aurora", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "+NCDE+9ihAQsHYCDHoSAlMblGFQ44XMJWcHvNVEFmj/sdE6QgLhk9Otz1AAAAAAAAAAAAAAAAMfqgZ6/COX/SB1HCKYC+SOAr7sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq6wDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZHZpJ4ScioLIoJjp4MmKXcnhylS3GYki1uvpHg8xwMblDaLwkSVXzQMCoCSmCbsMdGTFxPBCAdautus3bO0uFxVXiXY2YJaHHTyO", - "deposit": "0", - "gas": 300000000000000, - "method_name": "submit" - } - } - ], - "gas_price": "625040174", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "relay.aurora", - "signer_public_key": "ed25519:6gNHGeifK61KjBgW2Pn6NyQJyw9xgP4uLQgr1NrKQjhK" - } - }, - "receipt_id": "GWjrwTQ5VwBdJvesqY8Drrv47bdPePNRqdsE8H1tVc5K", - "receiver_id": "aurora" - }, - { - "predecessor_id": "token.sweat", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "350000000000000000000" - } - } - ], - "gas_price": "122987387", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:7ehQMq5CxWinuNqbigdZ7dqNPAK4ZbJUj76SQ6xo23ia" - } - }, - "receipt_id": "H9SAk6R1uuq7AzSpK9mJ29LRB7dN3MAfsppZPh9nhWqi", - "receiver_id": "sweat_welcome.near" - }, - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "3581491543024083600468" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:7ehQMq5CxWinuNqbigdZ7dqNPAK4ZbJUj76SQ6xo23ia" - } - }, - "receipt_id": "7GAVJSFYbALYWLndUuWnFhYXzuP4gzU5ckwAdGQxL8Vv", - "receiver_id": "sweat_welcome.near" - }, - { - "predecessor_id": "token.sweat", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "350000000000000000000" - } - } - ], - "gas_price": "122987387", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:Ed2Qp2whbMphnXayJU94jdSV3KeEejn9wk54FouFxxDZ" - } - }, - "receipt_id": "FWBbgZDwWRhCzJSucoXrHtFLMoeq4LQrPYZshotwK7vc", - "receiver_id": "sweat_welcome.near" - }, - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "3626309065658283600468" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:Ed2Qp2whbMphnXayJU94jdSV3KeEejn9wk54FouFxxDZ" - } - }, - "receipt_id": "9eEhPbDep1MdfSfsoLvW4p2wC9XuBVuGoTUaUaoR7wqp", - "receiver_id": "sweat_welcome.near" - }, - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "5130383935839187500" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:3ABZWQDGe7NTdZgFWZXm5ssnGvSmnvY9ZBFA8zXAsGZm" - } - }, - "receipt_id": "C4Y2iwVETV4QxvzRiC3hpWumDRYrCwi8sK6yZ2oM6smz", - "receiver_id": "sweat_welcome.near" - }, - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "1434895483223091390800" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "559943f15e74939ddeb799d684a9c05ef1d96a4bb40314e90c6a45b381c92c88", - "signer_public_key": "ed25519:5gCG5Czt7ZsqELQVxEAEGL4eq8e75Y2wd52Fs96FsnN2" - } - }, - "receipt_id": "6NNRshJfwuZYJvxXS1JCFMZXCjYd2GdK6gLgeE85FJqK", - "receiver_id": "559943f15e74939ddeb799d684a9c05ef1d96a4bb40314e90c6a45b381c92c88" - }, - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "1430867781039410315000" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "aea0194936450e30a33909b750b514df4702afeb68d458dbc52ce03306dc0286", - "signer_public_key": "ed25519:CkfXqE6dQnQSqSLyND7YobfaqNpRaoNHsVFeKRFCb1Wu" - } - }, - "receipt_id": "6r6vy6jeNLXJ35JhJb8yUsJHMebP8SnZwNQjPRfcJ38L", - "receiver_id": "aea0194936450e30a33909b750b514df4702afeb68d458dbc52ce03306dc0286" - }, - { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "1457218832396810315000" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "2f82783e48caca533db368aad9da6dd9f92374bffd008245b94a9417c66ae34f", - "signer_public_key": "ed25519:4CTYtj8RMfo2qJFWMzSaVSfft1FuoLGKnUESbGxnR3BL" - } - }, - "receipt_id": "3WKf2WSBkJJr1G3fF9XEHMde672FbPWiCLQyEktfbBfR", - "receiver_id": "2f82783e48caca533db368aad9da6dd9f92374bffd008245b94a9417c66ae34f" - } - ], - "transactions": [ - { - "outcome": { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "72krTmVBGzwqT2VyNaw7NAmybGHr9TaEFgt5r2tg3p9U", - "outcome": { - "executor_id": "learn.sweat", - "gas_burnt": 2428229558892, - "logs": [], - "metadata": { - "gas_profile": null, - "version": 1 - }, - "receipt_ids": [ - "FwJaDcrTo1hoVULwVmH1gqFkmUDnw4LNyf1RRNCKVykm" - ], - "status": { - "SuccessReceiptId": "FwJaDcrTo1hoVULwVmH1gqFkmUDnw4LNyf1RRNCKVykm" - }, - "tokens_burnt": "242822955889200000000" - }, - "proof": [ - { - "direction": "Right", - "hash": "9XVpjCP7Lon6AiVEggKTP5LqCTqfhMrqu5jfge82KnF" - }, - { - "direction": "Right", - "hash": "B5xfYP2LpgnDCi1GzuUzEr13sbVhGUGo4psUwWBUcowo" - }, - { - "direction": "Right", - "hash": "9oPAiJ31D7s7nctzdc31aNAenpvz4Z6vHrfV1PFEn7Ts" - }, - { - "direction": "Right", - "hash": "7TBcTGGbdbcrbwPN8Ch7YYAYoYHevQv4xUDNapuXuqGT" - } - ] - }, - "receipt": null - }, - "transaction": { - "actions": [ - { - "FunctionCall": { - "args": "eyJyZWNlaXZlcl9pZCI6ImQ3OWJjYWQ5MmE3NTM4YjczNGYyYzczN2U0MDAxMDFiMzMzYjRkMzVhMGMwZDc5ODRmNWMyN2QyYmUxMWQ0YjMiLCJhbW91bnQiOiIxMDAwMDAwIiwibWVtbyI6InN3OnRyOkoxV2sxRDZ3S2EifQ==", - "deposit": "1", - "gas": 30000000000000, - "method_name": "ft_transfer" - } - } - ], - "hash": "72krTmVBGzwqT2VyNaw7NAmybGHr9TaEFgt5r2tg3p9U", - "nonce": 79605023186277, - "public_key": "ed25519:9wRicBBHSqTtPzooqYTmhijZcQXonJM7FjQxvh6cfKzo", - "receiver_id": "usdt.tether-token.near", - "signature": "ed25519:26XWRA6TrevnVZyVvJU1mecFFCKUCxXofbsvhT39cruxEYQeTA3Hys9piTJ4CXW4CanuhiDks92oq6BTwMMV5e55", - "signer_id": "learn.sweat" - } - }, - { - "outcome": { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "9GeEkpJ3L4PC2EU1Pseyc1TfxdJxoQMkNHjtjZ1bSCsw", - "outcome": { - "executor_id": "sweat_welcome.near", - "gas_burnt": 2428135649664, - "logs": [], - "metadata": { - "gas_profile": null, - "version": 1 - }, - "receipt_ids": [ - "BxgraVvjqCoUpwMeaJivTDBg5TLkibsoqGt3aLxqkedZ" - ], - "status": { - "SuccessReceiptId": "BxgraVvjqCoUpwMeaJivTDBg5TLkibsoqGt3aLxqkedZ" - }, - "tokens_burnt": "242813564966400000000" - }, - "proof": [ - { - "direction": "Left", - "hash": "9ujNQYLwxCHJtfF3m7XCwumhk96opPR3sENDnijhXEhz" - }, - { - "direction": "Right", - "hash": "B5xfYP2LpgnDCi1GzuUzEr13sbVhGUGo4psUwWBUcowo" - }, - { - "direction": "Right", - "hash": "9oPAiJ31D7s7nctzdc31aNAenpvz4Z6vHrfV1PFEn7Ts" - }, - { - "direction": "Right", - "hash": "7TBcTGGbdbcrbwPN8Ch7YYAYoYHevQv4xUDNapuXuqGT" - } - ] - }, - "receipt": null - }, - "transaction": { - "actions": [ - { - "FunctionCall": { - "args": "eyJhY2NvdW50X2lkIjoiN2YyYTQ1ODhmMjc1ZmE0OTI2NjFjOWY4ODk0ZGZlOGI5Yzk0OWZiNThiNWM3OTk4OThmZjc4MGI2ZjY3OTBmMiJ9", - "deposit": "1250000000000000000000", - "gas": 30000000000000, - "method_name": "storage_deposit" - } - } - ], - "hash": "9GeEkpJ3L4PC2EU1Pseyc1TfxdJxoQMkNHjtjZ1bSCsw", - "nonce": 64885790385160, - "public_key": "ed25519:4AHsaAFYC2xdLmxHJ4jrD4dYrC1nhSTWA3aUJkGiSHwo", - "receiver_id": "token.sweat", - "signature": "ed25519:5j7b5geLDHcoEwgysZD4TfzGyj89VFuqwMPw3y3mz165zYoZcuqxMH9qPgWtZXTsgjQrMW4pKgyLd7yUMKVmFhVe", - "signer_id": "sweat_welcome.near" - } - } - ] - }, - "receipt_execution_outcomes": [ - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "H9SAk6R1uuq7AzSpK9mJ29LRB7dN3MAfsppZPh9nhWqi", - "outcome": { - "executor_id": "sweat_welcome.near", - "gas_burnt": 223182562500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [ - "429zNXLd2jR2BEETtwxaLUrQXNhQvcdshF9eb5DNf2Nu" - ], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "22318256250000000000" - }, - "proof": [ - { - "direction": "Right", - "hash": "C4WWkJcwB43B6TMA4Dq63VJ8VxNdNnx3XBkwDaXnha7n" - }, - { - "direction": "Left", - "hash": "E6PSDshezur3CjDBbhtTaNpKS9SRwMhoBmSVonw35zhp" - }, - { - "direction": "Right", - "hash": "9oPAiJ31D7s7nctzdc31aNAenpvz4Z6vHrfV1PFEn7Ts" - }, - { - "direction": "Right", - "hash": "7TBcTGGbdbcrbwPN8Ch7YYAYoYHevQv4xUDNapuXuqGT" - } - ] - }, - "receipt": { - "predecessor_id": "token.sweat", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "350000000000000000000" - } - } - ], - "gas_price": "122987387", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:7ehQMq5CxWinuNqbigdZ7dqNPAK4ZbJUj76SQ6xo23ia" - } - }, - "receipt_id": "H9SAk6R1uuq7AzSpK9mJ29LRB7dN3MAfsppZPh9nhWqi", - "receiver_id": "sweat_welcome.near" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "7GAVJSFYbALYWLndUuWnFhYXzuP4gzU5ckwAdGQxL8Vv", - "outcome": { - "executor_id": "sweat_welcome.near", - "gas_burnt": 223182562500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Left", - "hash": "FxU1sEYundW98oLSfq1QC9hYzAA4c5CGEwevv8mBR8Ng" - }, - { - "direction": "Left", - "hash": "E6PSDshezur3CjDBbhtTaNpKS9SRwMhoBmSVonw35zhp" - }, - { - "direction": "Right", - "hash": "9oPAiJ31D7s7nctzdc31aNAenpvz4Z6vHrfV1PFEn7Ts" - }, - { - "direction": "Right", - "hash": "7TBcTGGbdbcrbwPN8Ch7YYAYoYHevQv4xUDNapuXuqGT" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "3581491543024083600468" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:7ehQMq5CxWinuNqbigdZ7dqNPAK4ZbJUj76SQ6xo23ia" - } - }, - "receipt_id": "7GAVJSFYbALYWLndUuWnFhYXzuP4gzU5ckwAdGQxL8Vv", - "receiver_id": "sweat_welcome.near" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "FWBbgZDwWRhCzJSucoXrHtFLMoeq4LQrPYZshotwK7vc", - "outcome": { - "executor_id": "sweat_welcome.near", - "gas_burnt": 223182562500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [ - "DUcr9mypKu5jadbsDZSeY27bKe1ENoAP48QvGhnr8QVs" - ], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "22318256250000000000" - }, - "proof": [ - { - "direction": "Right", - "hash": "5UAL2gfQPdJ2XTJ7KrrVjxzPJ6rYoXaH4T3eyHUdLJx9" - }, - { - "direction": "Right", - "hash": "4syYE6tJ6Emfc4H1f9F6yxMufyBM1aq59aWFMpemCNTE" - }, - { - "direction": "Left", - "hash": "HwEAbDK9bdTkdyWAazpVmhZBik8xFGU1yYWBroPYgAq4" - }, - { - "direction": "Right", - "hash": "7TBcTGGbdbcrbwPN8Ch7YYAYoYHevQv4xUDNapuXuqGT" - } - ] - }, - "receipt": { - "predecessor_id": "token.sweat", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "350000000000000000000" - } - } - ], - "gas_price": "122987387", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:Ed2Qp2whbMphnXayJU94jdSV3KeEejn9wk54FouFxxDZ" - } - }, - "receipt_id": "FWBbgZDwWRhCzJSucoXrHtFLMoeq4LQrPYZshotwK7vc", - "receiver_id": "sweat_welcome.near" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "9eEhPbDep1MdfSfsoLvW4p2wC9XuBVuGoTUaUaoR7wqp", - "outcome": { - "executor_id": "sweat_welcome.near", - "gas_burnt": 223182562500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Left", - "hash": "8vb9biLxjtSwwpuZcdRvKCLB8MQXozqTkT9GC1yXCSxB" - }, - { - "direction": "Right", - "hash": "4syYE6tJ6Emfc4H1f9F6yxMufyBM1aq59aWFMpemCNTE" - }, - { - "direction": "Left", - "hash": "HwEAbDK9bdTkdyWAazpVmhZBik8xFGU1yYWBroPYgAq4" - }, - { - "direction": "Right", - "hash": "7TBcTGGbdbcrbwPN8Ch7YYAYoYHevQv4xUDNapuXuqGT" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "3626309065658283600468" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:Ed2Qp2whbMphnXayJU94jdSV3KeEejn9wk54FouFxxDZ" - } - }, - "receipt_id": "9eEhPbDep1MdfSfsoLvW4p2wC9XuBVuGoTUaUaoR7wqp", - "receiver_id": "sweat_welcome.near" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "C4Y2iwVETV4QxvzRiC3hpWumDRYrCwi8sK6yZ2oM6smz", - "outcome": { - "executor_id": "sweat_welcome.near", - "gas_burnt": 223182562500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Right", - "hash": "A99jUueZu5FSfVixTV7tG86jdb8gSDfAisBcZWB5JX5v" - }, - { - "direction": "Left", - "hash": "HJA4GMFD1NzLJasfXpSM5BFnhA8mXGP89A5SaL6rkLEU" - }, - { - "direction": "Left", - "hash": "HwEAbDK9bdTkdyWAazpVmhZBik8xFGU1yYWBroPYgAq4" - }, - { - "direction": "Right", - "hash": "7TBcTGGbdbcrbwPN8Ch7YYAYoYHevQv4xUDNapuXuqGT" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "5130383935839187500" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:3ABZWQDGe7NTdZgFWZXm5ssnGvSmnvY9ZBFA8zXAsGZm" - } - }, - "receipt_id": "C4Y2iwVETV4QxvzRiC3hpWumDRYrCwi8sK6yZ2oM6smz", - "receiver_id": "sweat_welcome.near" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "4TbBhk5HrKbL7m6Jvkw8R7W6hsx38cGTEqtnbysjwG9t", - "outcome": { - "executor_id": "relay.aurora", - "gas_burnt": 223182562500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Left", - "hash": "7vD1QQq3vtMJw4NuDW4G4tzqhaykfuXJf5oxfgj2froh" - }, - { - "direction": "Left", - "hash": "HJA4GMFD1NzLJasfXpSM5BFnhA8mXGP89A5SaL6rkLEU" - }, - { - "direction": "Left", - "hash": "HwEAbDK9bdTkdyWAazpVmhZBik8xFGU1yYWBroPYgAq4" - }, - { - "direction": "Right", - "hash": "7TBcTGGbdbcrbwPN8Ch7YYAYoYHevQv4xUDNapuXuqGT" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "188653474442246325537704" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "relay.aurora", - "signer_public_key": "ed25519:DHJZ82oYW3skfV8PJPPGQ583dcrp5Qc6aP6hJYePGWp1" - } - }, - "receipt_id": "4TbBhk5HrKbL7m6Jvkw8R7W6hsx38cGTEqtnbysjwG9t", - "receiver_id": "relay.aurora" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "HaT3ZccHwsEWnRJUBVuHqBetFNj2VkPpN3n3LEqsggBy", - "outcome": { - "executor_id": "sweat_welcome.near", - "gas_burnt": 223182562500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Right", - "hash": "6XTFHFoiSz8fcErWXHnRQbDdPsL19P8LaBwM9Txh3sUw" - }, - { - "direction": "Right", - "hash": "CaXbHao7W4CPgDb7kfLvP94KypgcXU5TzkEQMECr7YE2" - }, - { - "direction": "Left", - "hash": "CRqTMvXzUoYuQkh5VqwKBty8W8cPc8yAUbVpkWBnVxgc" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "12524843062500000000" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:7ehQMq5CxWinuNqbigdZ7dqNPAK4ZbJUj76SQ6xo23ia" - } - }, - "receipt_id": "HaT3ZccHwsEWnRJUBVuHqBetFNj2VkPpN3n3LEqsggBy", - "receiver_id": "sweat_welcome.near" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "zGuoGbPEvvumUASBeui7VVneDh4Ft2TGaxUPj3mR2eG", - "outcome": { - "executor_id": "token.sweat", - "gas_burnt": 4035946129711, - "logs": [ - "EVENT_JSON:{\"standard\":\"nep141\",\"version\":\"1.0.0\",\"event\":\"ft_transfer\",\"data\":[{\"old_owner_id\":\"7e887c69ca5edd6eadfe7b87905a1c12d0ea5c8e6e6ae1a9659b74a43490d497\",\"new_owner_id\":\"reward-optin.sweat\",\"amount\":\"100000000000000000\",\"memo\":\"sw:rew:optin:YGM43xyW8P-7e887c69ca5edd6eadfe7b87905a1c12d0ea5c8e6e6ae1a9659b74a43490d497\"}]}" - ], - "metadata": { - "gas_profile": [ - { - "cost": "BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "7413507108" - }, - { - "cost": "CONTRACT_LOADING_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "35445963" - }, - { - "cost": "CONTRACT_LOADING_BYTES", - "cost_category": "WASM_HOST_COST", - "gas_used": "44831486250" - }, - { - "cost": "LOG_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3543313050" - }, - { - "cost": "LOG_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "4342402239" - }, - { - "cost": "READ_CACHED_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "275880000000" - }, - { - "cost": "READ_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "36538084800" - }, - { - "cost": "READ_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2816787753" - }, - { - "cost": "READ_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "27688817046" - }, - { - "cost": "READ_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "48295380" - }, - { - "cost": "SHA256_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "18163881000" - }, - { - "cost": "SHA256_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3955245564" - }, - { - "cost": "STORAGE_READ_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "169070537250" - }, - { - "cost": "STORAGE_READ_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2259534909" - }, - { - "cost": "STORAGE_READ_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "572322510" - }, - { - "cost": "STORAGE_WRITE_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "192590208000" - }, - { - "cost": "STORAGE_WRITE_EVICTED_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3275965314" - }, - { - "cost": "STORAGE_WRITE_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "5145249291" - }, - { - "cost": "STORAGE_WRITE_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3163890978" - }, - { - "cost": "TOUCHING_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "579670413336" - }, - { - "cost": "UTF8_DECODING_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3111779061" - }, - { - "cost": "UTF8_DECODING_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "95929977591" - }, - { - "cost": "WASM_INSTRUCTION", - "cost_category": "WASM_HOST_COST", - "gas_used": "56047784232" - }, - { - "cost": "WRITE_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "33645538332" - }, - { - "cost": "WRITE_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1378228632" - }, - { - "cost": "WRITE_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "34386269832" - }, - { - "cost": "WRITE_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2128875840" - } - ], - "version": 3 - }, - "receipt_ids": [ - "FpvAgN8LCKcGYwQ2CxxHP4XExLgNjYSUXVCZdBdrv3hY" - ], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "403594612971100000000" - }, - "proof": [ - { - "direction": "Left", - "hash": "AuAPQjLNCa1QpLnEFZts9eRJeYXjgAqJ25Cye3y4Pf9X" - }, - { - "direction": "Right", - "hash": "CaXbHao7W4CPgDb7kfLvP94KypgcXU5TzkEQMECr7YE2" - }, - { - "direction": "Left", - "hash": "CRqTMvXzUoYuQkh5VqwKBty8W8cPc8yAUbVpkWBnVxgc" - } - ] - }, - "receipt": { - "predecessor_id": "7e887c69ca5edd6eadfe7b87905a1c12d0ea5c8e6e6ae1a9659b74a43490d497", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "eyJyZWNlaXZlcl9pZCI6InJld2FyZC1vcHRpbi5zd2VhdCIsImFtb3VudCI6IjEwMDAwMDAwMDAwMDAwMDAwMCIsIm1lbW8iOiJzdzpyZXc6b3B0aW46WUdNNDN4eVc4UC03ZTg4N2M2OWNhNWVkZDZlYWRmZTdiODc5MDVhMWMxMmQwZWE1YzhlNmU2YWUxYTk2NTliNzRhNDM0OTBkNDk3In0=", - "deposit": "1", - "gas": 14000000000000, - "method_name": "ft_transfer" - } - } - ], - "gas_price": "109272700", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "7e887c69ca5edd6eadfe7b87905a1c12d0ea5c8e6e6ae1a9659b74a43490d497", - "signer_public_key": "ed25519:9Ww5a9UTdpEi1qYVFkv97E2Fvx88gqbVtnNTzCKrqvvJ" - } - }, - "receipt_id": "zGuoGbPEvvumUASBeui7VVneDh4Ft2TGaxUPj3mR2eG", - "receiver_id": "token.sweat" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "Fp8WoevW4UaFfeXV6341E5gcnkvREwjKByUDgvo4PdQy", - "outcome": { - "executor_id": "token.sweat", - "gas_burnt": 3411715482193, - "logs": [ - "EVENT_JSON:{\"standard\":\"nep141\",\"version\":\"1.0.0\",\"event\":\"ft_transfer\",\"data\":[{\"old_owner_id\":\"17f374fb3e1e293f646627b869be7f63b3586ce417947e7f13275195f96cc8af\",\"new_owner_id\":\"reward-optin.sweat\",\"amount\":\"100000000000000000\",\"memo\":\"sw:rew:optin:YGM43xyW8P-17f374fb3e1e293f646627b869be7f63b3586ce417947e7f13275195f96cc8af\"}]}" - ], - "metadata": { - "gas_profile": [ - { - "cost": "BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "7413507108" - }, - { - "cost": "CONTRACT_LOADING_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "35445963" - }, - { - "cost": "CONTRACT_LOADING_BYTES", - "cost_category": "WASM_HOST_COST", - "gas_used": "44831486250" - }, - { - "cost": "LOG_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3543313050" - }, - { - "cost": "LOG_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "4342402239" - }, - { - "cost": "READ_CACHED_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "118560000000" - }, - { - "cost": "READ_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "36538084800" - }, - { - "cost": "READ_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2816787753" - }, - { - "cost": "READ_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "27688817046" - }, - { - "cost": "READ_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "48295380" - }, - { - "cost": "SHA256_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "18163881000" - }, - { - "cost": "SHA256_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3955245564" - }, - { - "cost": "STORAGE_READ_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "169070537250" - }, - { - "cost": "STORAGE_READ_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2259534909" - }, - { - "cost": "STORAGE_READ_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "572322510" - }, - { - "cost": "STORAGE_WRITE_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "192590208000" - }, - { - "cost": "STORAGE_WRITE_EVICTED_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3275965314" - }, - { - "cost": "STORAGE_WRITE_KEY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "5145249291" - }, - { - "cost": "STORAGE_WRITE_VALUE_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3163890978" - }, - { - "cost": "TOUCHING_TRIE_NODE", - "cost_category": "WASM_HOST_COST", - "gas_used": "112713691482" - }, - { - "cost": "UTF8_DECODING_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "3111779061" - }, - { - "cost": "UTF8_DECODING_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "95929977591" - }, - { - "cost": "WASM_INSTRUCTION", - "cost_category": "WASM_HOST_COST", - "gas_used": "56093858568" - }, - { - "cost": "WRITE_MEMORY_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "33645538332" - }, - { - "cost": "WRITE_MEMORY_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "1378228632" - }, - { - "cost": "WRITE_REGISTER_BASE", - "cost_category": "WASM_HOST_COST", - "gas_used": "34386269832" - }, - { - "cost": "WRITE_REGISTER_BYTE", - "cost_category": "WASM_HOST_COST", - "gas_used": "2128875840" - } - ], - "version": 3 - }, - "receipt_ids": [ - "AmFPHsoaV3xNn9YAyyJDGtiFvx8n9RSunkEaUuHRignS" - ], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "341171548219300000000" - }, - "proof": [ - { - "direction": "Right", - "hash": "5DTQWcaMq1Jn5dhwQTwDamAQMLoY4jRDj7ecsV9HrE45" - }, - { - "direction": "Left", - "hash": "1h1E65sVAQuaJVhD769zVwG4qRUXzbZFZcweqPyWgXu" - }, - { - "direction": "Left", - "hash": "CRqTMvXzUoYuQkh5VqwKBty8W8cPc8yAUbVpkWBnVxgc" - } - ] - }, - "receipt": { - "predecessor_id": "17f374fb3e1e293f646627b869be7f63b3586ce417947e7f13275195f96cc8af", - "receipt": { - "Action": { - "actions": [ - { - "FunctionCall": { - "args": "eyJyZWNlaXZlcl9pZCI6InJld2FyZC1vcHRpbi5zd2VhdCIsImFtb3VudCI6IjEwMDAwMDAwMDAwMDAwMDAwMCIsIm1lbW8iOiJzdzpyZXc6b3B0aW46WUdNNDN4eVc4UC0xN2YzNzRmYjNlMWUyOTNmNjQ2NjI3Yjg2OWJlN2Y2M2IzNTg2Y2U0MTc5NDdlN2YxMzI3NTE5NWY5NmNjOGFmIn0=", - "deposit": "1", - "gas": 14000000000000, - "method_name": "ft_transfer" - } - } - ], - "gas_price": "109272700", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "17f374fb3e1e293f646627b869be7f63b3586ce417947e7f13275195f96cc8af", - "signer_public_key": "ed25519:2cVh7bm8ibwH4VUoUJqGb1yrckq5HdFHkzHrW8inRBSn" - } - }, - "receipt_id": "Fp8WoevW4UaFfeXV6341E5gcnkvREwjKByUDgvo4PdQy", - "receiver_id": "token.sweat" - } - }, - { - "execution_outcome": { - "block_hash": "9EGASj6bhqjHhCGaRG6u2BkywEBrLzTZSaoh6ECPH2Jo", - "id": "616WtYRqUTBG1axECm9d2doCxdmiNqGBpGDSWGh7w6ec", - "outcome": { - "executor_id": "sweat_welcome.near", - "gas_burnt": 223182562500, - "logs": [], - "metadata": { - "gas_profile": [], - "version": 3 - }, - "receipt_ids": [], - "status": { - "SuccessValue": "" - }, - "tokens_burnt": "0" - }, - "proof": [ - { - "direction": "Left", - "hash": "8tgyZPF5rRjU1wmJNVFhztMvbphcnVQ6AQV7KehthF14" - }, - { - "direction": "Left", - "hash": "1h1E65sVAQuaJVhD769zVwG4qRUXzbZFZcweqPyWgXu" - }, - { - "direction": "Left", - "hash": "CRqTMvXzUoYuQkh5VqwKBty8W8cPc8yAUbVpkWBnVxgc" - } - ] - }, - "receipt": { - "predecessor_id": "system", - "receipt": { - "Action": { - "actions": [ - { - "Transfer": { - "deposit": "12524843062500000000" - } - } - ], - "gas_price": "0", - "input_data_ids": [], - "output_data_receivers": [], - "signer_id": "sweat_welcome.near", - "signer_public_key": "ed25519:Ed2Qp2whbMphnXayJU94jdSV3KeEejn9wk54FouFxxDZ" - } - }, - "receipt_id": "616WtYRqUTBG1axECm9d2doCxdmiNqGBpGDSWGh7w6ec", - "receiver_id": "sweat_welcome.near" - } - } - ], - "shard_id": 3, - "state_changes": [ - { - "cause": { - "tx_hash": "72krTmVBGzwqT2VyNaw7NAmybGHr9TaEFgt5r2tg3p9U", - "type": "transaction_processing" - }, - "change": { - "account_id": "learn.sweat", - "amount": "30099117542978502021678522885", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 428 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "4TbBhk5HrKbL7m6Jvkw8R7W6hsx38cGTEqtnbysjwG9t", - "type": "receipt_processing" - }, - "change": { - "account_id": "relay.aurora", - "amount": "3510443757928215044805925599", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 149094 - }, - "type": "account_update" - }, - { - "cause": { - "tx_hash": "9GeEkpJ3L4PC2EU1Pseyc1TfxdJxoQMkNHjtjZ1bSCsw", - "type": "transaction_processing" - }, - "change": { - "account_id": "sweat_welcome.near", - "amount": "9595920925663625528594987164", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 33978 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "H9SAk6R1uuq7AzSpK9mJ29LRB7dN3MAfsppZPh9nhWqi", - "type": "receipt_processing" - }, - "change": { - "account_id": "sweat_welcome.near", - "amount": "9595921275663625528594987164", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 33978 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "7GAVJSFYbALYWLndUuWnFhYXzuP4gzU5ckwAdGQxL8Vv", - "type": "receipt_processing" - }, - "change": { - "account_id": "sweat_welcome.near", - "amount": "9595924857155168552678587632", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 33978 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "FWBbgZDwWRhCzJSucoXrHtFLMoeq4LQrPYZshotwK7vc", - "type": "receipt_processing" - }, - "change": { - "account_id": "sweat_welcome.near", - "amount": "9595925207155168552678587632", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 33978 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "9eEhPbDep1MdfSfsoLvW4p2wC9XuBVuGoTUaUaoR7wqp", - "type": "receipt_processing" - }, - "change": { - "account_id": "sweat_welcome.near", - "amount": "9595928833464234210962188100", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 33978 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "C4Y2iwVETV4QxvzRiC3hpWumDRYrCwi8sK6yZ2oM6smz", - "type": "receipt_processing" - }, - "change": { - "account_id": "sweat_welcome.near", - "amount": "9595928838594618146801375600", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 33978 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "HaT3ZccHwsEWnRJUBVuHqBetFNj2VkPpN3n3LEqsggBy", - "type": "receipt_processing" - }, - "change": { - "account_id": "sweat_welcome.near", - "amount": "9595928851119461209301375600", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 33978 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "616WtYRqUTBG1axECm9d2doCxdmiNqGBpGDSWGh7w6ec", - "type": "receipt_processing" - }, - "change": { - "account_id": "sweat_welcome.near", - "amount": "9595928863644304271801375600", - "code_hash": "11111111111111111111111111111111", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 33978 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "zGuoGbPEvvumUASBeui7VVneDh4Ft2TGaxUPj3mR2eG", - "type": "receipt_processing" - }, - "change": { - "account_id": "token.sweat", - "amount": "42378846351006527537475502452", - "code_hash": "FMy4MTxATGtfxqTg5PZfGhQpRWej9Ppbttwo7FWF13wA", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 1750527028 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "zGuoGbPEvvumUASBeui7VVneDh4Ft2TGaxUPj3mR2eG", - "type": "action_receipt_gas_reward" - }, - "change": { - "account_id": "token.sweat", - "amount": "42378846399235542775275502452", - "code_hash": "FMy4MTxATGtfxqTg5PZfGhQpRWej9Ppbttwo7FWF13wA", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 1750527028 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "Fp8WoevW4UaFfeXV6341E5gcnkvREwjKByUDgvo4PdQy", - "type": "receipt_processing" - }, - "change": { - "account_id": "token.sweat", - "amount": "42378846399235542775275502453", - "code_hash": "FMy4MTxATGtfxqTg5PZfGhQpRWej9Ppbttwo7FWF13wA", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 1750527028 - }, - "type": "account_update" - }, - { - "cause": { - "receipt_hash": "Fp8WoevW4UaFfeXV6341E5gcnkvREwjKByUDgvo4PdQy", - "type": "action_receipt_gas_reward" - }, - "change": { - "account_id": "token.sweat", - "amount": "42378846428737638587475502453", - "code_hash": "FMy4MTxATGtfxqTg5PZfGhQpRWej9Ppbttwo7FWF13wA", - "locked": "0", - "storage_paid_at": 0, - "storage_usage": 1750527028 - }, - "type": "account_update" - }, - { - "cause": { - "tx_hash": "72krTmVBGzwqT2VyNaw7NAmybGHr9TaEFgt5r2tg3p9U", - "type": "transaction_processing" - }, - "change": { - "access_key": { - "nonce": 79605023186277, - "permission": "FullAccess" - }, - "account_id": "learn.sweat", - "public_key": "ed25519:9wRicBBHSqTtPzooqYTmhijZcQXonJM7FjQxvh6cfKzo" - }, - "type": "access_key_update" - }, - { - "cause": { - "tx_hash": "9GeEkpJ3L4PC2EU1Pseyc1TfxdJxoQMkNHjtjZ1bSCsw", - "type": "transaction_processing" - }, - "change": { - "access_key": { - "nonce": 64885790385160, - "permission": "FullAccess" - }, - "account_id": "sweat_welcome.near", - "public_key": "ed25519:4AHsaAFYC2xdLmxHJ4jrD4dYrC1nhSTWA3aUJkGiSHwo" - }, - "type": "access_key_update" - }, - { - "cause": { - "receipt_hash": "zGuoGbPEvvumUASBeui7VVneDh4Ft2TGaxUPj3mR2eG", - "type": "receipt_processing" - }, - "change": { - "account_id": "token.sweat", - "key_base64": "U1RBVEU=", - "value_base64": "AgAAAHNpAQAAAAAAAAACAAAAc2UBAAAAdAEIAAAALnUuc3dlYXRuYQUV3fGQ1o6B6EgAAAAAWgAAAAAAAACbrJQMIAMAAA==" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "Fp8WoevW4UaFfeXV6341E5gcnkvREwjKByUDgvo4PdQy", - "type": "receipt_processing" - }, - "change": { - "account_id": "token.sweat", - "key_base64": "U1RBVEU=", - "value_base64": "AgAAAHNpAQAAAAAAAAACAAAAc2UBAAAAdAEIAAAALnUuc3dlYXRuYQUV3fGQ1o6B6EgAAAAAWgAAAAAAAACbrJQMIAMAAA==" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "Fp8WoevW4UaFfeXV6341E5gcnkvREwjKByUDgvo4PdQy", - "type": "receipt_processing" - }, - "change": { - "account_id": "token.sweat", - "key_base64": "dACglC/CpWTpUlrfXdnDq1V4xp9895dkoq1najL6P/vm/g==", - "value_base64": "XEcywPEmdNwAAAAAAAAAAA==" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "zGuoGbPEvvumUASBeui7VVneDh4Ft2TGaxUPj3mR2eG", - "type": "receipt_processing" - }, - "change": { - "account_id": "token.sweat", - "key_base64": "dAC+WbOiDTgrGUzyuN0KcZDzu9wI324/JhwraZg/XAop3w==", - "value_base64": "uVN0oH5BwR4YAAAAAAAAAA==" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "zGuoGbPEvvumUASBeui7VVneDh4Ft2TGaxUPj3mR2eG", - "type": "receipt_processing" - }, - "change": { - "account_id": "token.sweat", - "key_base64": "dADCUiigKPOTAl1jqrFvCFMV6YPDQuu8kGehwLHx0CgpIw==", - "value_base64": "AACU+U4hffxfJgIAAAAAAA==" - }, - "type": "data_update" - }, - { - "cause": { - "receipt_hash": "Fp8WoevW4UaFfeXV6341E5gcnkvREwjKByUDgvo4PdQy", - "type": "receipt_processing" - }, - "change": { - "account_id": "token.sweat", - "key_base64": "dADCUiigKPOTAl1jqrFvCFMV6YPDQuu8kGehwLHx0CgpIw==", - "value_base64": "AAAeV8dm4P1fJgIAAAAAAA==" - }, - "type": "data_update" - } - ] - } - ] -} diff --git a/indexer/indexer_rules_engine/src/lib.rs b/indexer/indexer_rules_engine/src/lib.rs deleted file mode 100644 index 49ca95104..000000000 --- a/indexer/indexer_rules_engine/src/lib.rs +++ /dev/null @@ -1,25 +0,0 @@ -pub mod matcher; -pub mod outcomes_reducer; -pub mod types; - -use indexer_rule_type::indexer_rule::{IndexerRule, MatchingRule}; -use near_lake_framework::near_indexer_primitives::StreamerMessage; -use types::indexer_rule_match::{ChainId, IndexerRuleMatch}; - -pub fn reduce_indexer_rule_matches( - indexer_rule: &IndexerRule, - streamer_message: &StreamerMessage, - chain_id: ChainId, -) -> Vec { - match &indexer_rule.matching_rule { - MatchingRule::ActionAny { .. } - | MatchingRule::ActionFunctionCall { .. } - | MatchingRule::Event { .. } => { - outcomes_reducer::reduce_indexer_rule_matches_from_outcomes( - indexer_rule, - streamer_message, - chain_id, - ) - } - } -} diff --git a/indexer/indexer_rules_engine/src/matcher.rs b/indexer/indexer_rules_engine/src/matcher.rs deleted file mode 100644 index 864422db1..000000000 --- a/indexer/indexer_rules_engine/src/matcher.rs +++ /dev/null @@ -1,141 +0,0 @@ -use near_lake_framework::near_indexer_primitives::{ - views::{ActionView, ExecutionStatusView, ReceiptEnumView}, - IndexerExecutionOutcomeWithReceipt, -}; - -use crate::types::events::Event; -use indexer_rule_type::indexer_rule::{MatchingRule, Status}; - -pub fn matches( - matching_rule: &MatchingRule, - receipt_execution_outcome: &IndexerExecutionOutcomeWithReceipt, -) -> bool { - match matching_rule { - MatchingRule::ActionAny { - affected_account_id, - status, - } => match_action_any(affected_account_id, status, receipt_execution_outcome), - MatchingRule::ActionFunctionCall { - affected_account_id, - status, - function, - } => match_action_function_call( - affected_account_id, - status, - function, - receipt_execution_outcome, - ), - MatchingRule::Event { - contract_account_id, - event, - standard, - version, - } => match_event( - contract_account_id, - event, - standard, - version, - receipt_execution_outcome, - ), - } -} - -fn match_action_any( - account_id: &str, - status: &Status, - outcome_with_receipt: &IndexerExecutionOutcomeWithReceipt, -) -> bool { - if match_account(account_id, outcome_with_receipt) { - return match_status( - status, - &outcome_with_receipt.execution_outcome.outcome.status, - ); - } - false -} - -fn match_action_function_call( - account_id: &str, - status: &Status, - function: &str, - outcome_with_receipt: &IndexerExecutionOutcomeWithReceipt, -) -> bool { - if match_account(account_id, outcome_with_receipt) { - if let ReceiptEnumView::Action { actions, .. } = &outcome_with_receipt.receipt.receipt { - let is_any_matching_function_call = actions.iter().any(|action| { - if let ActionView::FunctionCall { method_name, .. } = action { - wildmatch::WildMatch::new(function).matches(method_name) - } else { - false - } - }); - if is_any_matching_function_call { - return match_status( - status, - &outcome_with_receipt.execution_outcome.outcome.status, - ); - } else { - return false; - } - } - } - false -} - -fn match_event( - account_id: &str, - event: &str, - standard: &str, - version: &str, - outcome_with_receipt: &IndexerExecutionOutcomeWithReceipt, -) -> bool { - if match_account(account_id, outcome_with_receipt) { - outcome_with_receipt - .execution_outcome - .outcome - .logs - .iter() - .filter_map(|log| Event::from_log(log).ok()) - .any(|near_event| { - vec![ - wildmatch::WildMatch::new(event).matches(&near_event.event), - wildmatch::WildMatch::new(standard).matches(&near_event.standard), - wildmatch::WildMatch::new(version).matches(&near_event.version), - ] - .into_iter() - .all(|val| val) - }) - } else { - false - } -} - -fn match_account( - account_id: &str, - outcome_with_receipt: &IndexerExecutionOutcomeWithReceipt, -) -> bool { - match account_id { - x if x.contains(',') => x - .split(',') - .any(|sub_account_id| match_account(sub_account_id.trim(), outcome_with_receipt)), - _ => { - wildmatch::WildMatch::new(account_id).matches(&outcome_with_receipt.receipt.receiver_id) - || wildmatch::WildMatch::new(account_id) - .matches(&outcome_with_receipt.receipt.predecessor_id) - } - } -} - -fn match_status(status: &Status, execution_outcome_status: &ExecutionStatusView) -> bool { - match status { - Status::Any => true, - Status::Success => matches!( - execution_outcome_status, - ExecutionStatusView::SuccessValue(_) | ExecutionStatusView::SuccessReceiptId(_) - ), - Status::Fail => !matches!( - execution_outcome_status, - ExecutionStatusView::SuccessValue(_) | ExecutionStatusView::SuccessReceiptId(_) - ), - } -} diff --git a/indexer/indexer_rules_engine/src/outcomes_reducer.rs b/indexer/indexer_rules_engine/src/outcomes_reducer.rs deleted file mode 100644 index 01cd1102c..000000000 --- a/indexer/indexer_rules_engine/src/outcomes_reducer.rs +++ /dev/null @@ -1,262 +0,0 @@ -use crate::matcher; -use crate::types::events::Event; -use crate::types::indexer_rule_match::{ChainId, IndexerRuleMatch, IndexerRuleMatchPayload}; -use indexer_rule_type::indexer_rule::{IndexerRule, MatchingRule}; -use near_lake_framework::near_indexer_primitives::{ - IndexerExecutionOutcomeWithReceipt, StreamerMessage, -}; - -pub fn reduce_indexer_rule_matches_from_outcomes( - indexer_rule: &IndexerRule, - streamer_message: &StreamerMessage, - chain_id: ChainId, -) -> Vec { - streamer_message - .shards - .iter() - .flat_map(|shard| { - shard - .receipt_execution_outcomes - .iter() - // future: when extracting Actions, Events, etc this will be a filter operation - .find(|receipt_execution_outcome| { - matcher::matches(&indexer_rule.matching_rule, receipt_execution_outcome) - }) - }) - .map(|receipt_execution_outcome| { - build_indexer_rule_match( - indexer_rule, - receipt_execution_outcome, - streamer_message.block.header.hash.to_string(), - streamer_message.block.header.height, - chain_id.clone(), - ) - }) - .collect() -} - -fn build_indexer_rule_match( - indexer_rule: &IndexerRule, - receipt_execution_outcome: &IndexerExecutionOutcomeWithReceipt, - block_header_hash: String, - block_height: u64, - chain_id: ChainId, -) -> IndexerRuleMatch { - IndexerRuleMatch { - chain_id: chain_id.clone(), - indexer_rule_id: indexer_rule.id, - indexer_rule_name: indexer_rule.name.clone(), - payload: build_indexer_rule_match_payload( - indexer_rule, - receipt_execution_outcome, - block_header_hash, - ), - block_height, - } -} - -fn build_indexer_rule_match_payload( - indexer_rule: &IndexerRule, - receipt_execution_outcome: &IndexerExecutionOutcomeWithReceipt, - block_header_hash: String, -) -> IndexerRuleMatchPayload { - // future enhancement will extract and enrich fields from block & context as - // specified in the indexer function config. - let transaction_hash = None; - - match &indexer_rule.matching_rule { - MatchingRule::ActionAny { .. } | MatchingRule::ActionFunctionCall { .. } => { - IndexerRuleMatchPayload::Actions { - block_hash: block_header_hash.to_string(), - receipt_id: receipt_execution_outcome.receipt.receipt_id.to_string(), - transaction_hash, - } - } - MatchingRule::Event { - event, - standard, - version, - .. - } => { - let event = receipt_execution_outcome - .execution_outcome - .outcome - .logs - .iter() - .filter_map(|log| Event::from_log(log).ok()) - .filter_map(|near_event| { - if vec![ - wildmatch::WildMatch::new(event).matches(&near_event.event), - wildmatch::WildMatch::new(standard).matches(&near_event.standard), - wildmatch::WildMatch::new(version).matches(&near_event.version), - ].into_iter().all(|val| val) { - Some(near_event) - } else { - None - } - }) - .collect::>() - .first() - .expect("Failed to get the matched Event itself while building the IndexerRuleMatchPayload") - .clone(); - - IndexerRuleMatchPayload::Events { - block_hash: block_header_hash.to_string(), - receipt_id: receipt_execution_outcome.receipt.receipt_id.to_string(), - transaction_hash, - event: event.event.clone(), - standard: event.standard.clone(), - version: event.version.clone(), - data: event.data.as_ref().map(|data| data.to_string()), - } - } - } -} - -#[cfg(test)] -mod tests { - use crate::outcomes_reducer::reduce_indexer_rule_matches_from_outcomes; - use crate::types::indexer_rule_match::{ChainId, IndexerRuleMatch}; - use indexer_rule_type::indexer_rule::{IndexerRule, IndexerRuleKind, MatchingRule, Status}; - use near_lake_framework::near_indexer_primitives::StreamerMessage; - - fn read_local_file(path: &str) -> String { - std::fs::read_to_string(path).unwrap() - } - fn read_local_streamer_message(block_height: u64) -> StreamerMessage { - let path = format!( - "{}/blocks/{}.json", - env!("CARGO_MANIFEST_DIR"), - block_height - ); - serde_json::from_str(&read_local_file(&path)).unwrap() - } - - #[tokio::test] - async fn match_wildcard_no_match() { - let wildcard_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule: MatchingRule::ActionAny { - affected_account_id: "*.nearcrow.near".to_string(), - status: Status::Success, - }, - id: None, - name: None, - }; - - let streamer_message = read_local_streamer_message(93085141); - let result: Vec = reduce_indexer_rule_matches_from_outcomes( - &wildcard_rule, - &streamer_message, - ChainId::Testnet, - ); - - assert_eq!(result.len(), 0); - } - - #[tokio::test] - async fn match_wildcard_contract_subaccount_name() { - let wildcard_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule: MatchingRule::ActionAny { - affected_account_id: "*.nearcrowd.near".to_string(), - status: Status::Success, - }, - id: None, - name: None, - }; - - let streamer_message = read_local_streamer_message(93085141); - let result: Vec = reduce_indexer_rule_matches_from_outcomes( - &wildcard_rule, - &streamer_message, - ChainId::Testnet, - ); - - assert_eq!(result.len(), 1); // There are two matches, until we add Extraction we are just matching the first one (block matching) - } - - #[tokio::test] - async fn match_wildcard_mid_contract_name() { - let wildcard_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule: MatchingRule::ActionAny { - affected_account_id: "*crowd.near".to_string(), - status: Status::Success, - }, - id: None, - name: None, - }; - - let streamer_message = read_local_streamer_message(93085141); - let result: Vec = reduce_indexer_rule_matches_from_outcomes( - &wildcard_rule, - &streamer_message, - ChainId::Testnet, - ); - - assert_eq!(result.len(), 1); // see Extraction note in previous test - - let wildcard_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule: MatchingRule::ActionAny { - affected_account_id: "app.nea*owd.near".to_string(), - status: Status::Success, - }, - id: None, - name: None, - }; - - let result: Vec = reduce_indexer_rule_matches_from_outcomes( - &wildcard_rule, - &streamer_message, - ChainId::Testnet, - ); - - assert_eq!(result.len(), 1); // see Extraction note in previous test - } - - #[tokio::test] - async fn match_csv_account() { - let wildcard_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule: MatchingRule::ActionAny { - affected_account_id: "notintheblockaccount.near, app.nearcrowd.near".to_string(), - status: Status::Success, - }, - id: None, - name: None, - }; - - let streamer_message = read_local_streamer_message(93085141); - let result: Vec = reduce_indexer_rule_matches_from_outcomes( - &wildcard_rule, - &streamer_message, - ChainId::Testnet, - ); - - assert_eq!(result.len(), 1); // There are two matches, until we add Extraction we are just matching the first one (block matching) - } - - #[tokio::test] - async fn match_csv_wildcard_account() { - let wildcard_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule: MatchingRule::ActionAny { - affected_account_id: "notintheblockaccount.near, *.nearcrowd.near".to_string(), - status: Status::Success, - }, - id: None, - name: None, - }; - - let streamer_message = read_local_streamer_message(93085141); - let result: Vec = reduce_indexer_rule_matches_from_outcomes( - &wildcard_rule, - &streamer_message, - ChainId::Testnet, - ); - - assert_eq!(result.len(), 1); // There are two matches, until we add Extraction we are just matching the first one (block matching) - } -} diff --git a/indexer/indexer_rules_engine/src/types/events.rs b/indexer/indexer_rules_engine/src/types/events.rs deleted file mode 100644 index 68bb176d0..000000000 --- a/indexer/indexer_rules_engine/src/types/events.rs +++ /dev/null @@ -1,20 +0,0 @@ -#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)] -pub struct Event { - pub event: String, - pub standard: String, - pub version: String, - pub data: Option, -} - -impl Event { - pub fn from_log(log: &str) -> anyhow::Result { - let prefix = "EVENT_JSON:"; - if !log.starts_with(prefix) { - anyhow::bail!("log message doesn't start from required prefix"); - } - - Ok(serde_json::from_str::<'_, Self>( - log[prefix.len()..].trim(), - )?) - } -} diff --git a/indexer/indexer_rules_engine/src/types/indexer_rule_match.rs b/indexer/indexer_rules_engine/src/types/indexer_rule_match.rs deleted file mode 100644 index 985f925a2..000000000 --- a/indexer/indexer_rules_engine/src/types/indexer_rule_match.rs +++ /dev/null @@ -1,146 +0,0 @@ -use std::fmt; - -pub type TransactionHashString = String; -pub type ReceiptIdString = String; -pub type BlockHashString = String; - -#[derive( - borsh::BorshSerialize, - borsh::BorshDeserialize, - serde::Serialize, - serde::Deserialize, - Clone, - Debug, -)] -pub struct IndexerRuleMatch { - pub chain_id: ChainId, - pub indexer_rule_id: Option, - pub indexer_rule_name: Option, - pub payload: IndexerRuleMatchPayload, - pub block_height: u64, -} - -impl IndexerRuleMatch { - pub fn explorer_link(&self) -> String { - match self.chain_id { - ChainId::Testnet => { - if let Some(tx_hash) = self.payload.transaction_hash() { - if let Some(receipt_id) = self.payload.receipt_id() { - format!( - "https://explorer.testnet.near.org/transactions/{}#{}", - tx_hash, receipt_id, - ) - } else { - format!("https://explorer.testnet.near.org/transactions/{}", tx_hash) - } - } else { - format!( - "https://explorer.testnet.near.org/block/{}", - self.payload.block_hash() - ) - } - } - ChainId::Mainnet => { - if let Some(tx_hash) = self.payload.transaction_hash() { - if let Some(receipt_id) = self.payload.receipt_id() { - format!( - "https://explorer.near.org/transactions/{}#{}", - tx_hash, receipt_id, - ) - } else { - format!("https://explorer.near.org/transactions/{}", tx_hash) - } - } else { - format!( - "https://explorer.near.org/block/{}", - self.payload.block_hash() - ) - } - } - } - } -} - -#[derive( - borsh::BorshSerialize, - borsh::BorshDeserialize, - serde::Serialize, - serde::Deserialize, - Clone, - Debug, -)] -pub enum IndexerRuleMatchPayload { - Actions { - block_hash: BlockHashString, - receipt_id: ReceiptIdString, - transaction_hash: Option, - }, - Events { - block_hash: BlockHashString, - receipt_id: ReceiptIdString, - transaction_hash: Option, - event: String, - standard: String, - version: String, - data: Option, - }, - StateChanges { - block_hash: BlockHashString, - receipt_id: Option, - transaction_hash: Option, - }, -} - -impl IndexerRuleMatchPayload { - pub fn block_hash(&self) -> BlockHashString { - match self { - Self::Actions { block_hash, .. } - | Self::Events { block_hash, .. } - | Self::StateChanges { block_hash, .. } => block_hash.to_string(), - } - } - - pub fn receipt_id(&self) -> Option { - match self { - Self::Actions { receipt_id, .. } | Self::Events { receipt_id, .. } => { - Some(receipt_id.to_string()) - } - Self::StateChanges { receipt_id, .. } => receipt_id.clone(), - } - } - - pub fn transaction_hash(&self) -> Option { - match self { - Self::Actions { - transaction_hash, .. - } - | Self::Events { - transaction_hash, .. - } - | Self::StateChanges { - transaction_hash, .. - } => transaction_hash.clone(), - } - } -} - -#[derive( - borsh::BorshSerialize, - borsh::BorshDeserialize, - serde::Serialize, - serde::Deserialize, - Clone, - Debug, -)] -pub enum ChainId { - Mainnet, - Testnet, -} -impl fmt::Display for ChainId { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - ChainId::Mainnet => write!(f, "mainnet"), - ChainId::Testnet => write!(f, "testnet"), - } - } -} diff --git a/indexer/indexer_rules_engine/src/types/mod.rs b/indexer/indexer_rules_engine/src/types/mod.rs deleted file mode 100644 index d82357aff..000000000 --- a/indexer/indexer_rules_engine/src/types/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod events; -pub mod indexer_rule_match; -pub mod transactions; diff --git a/indexer/indexer_rules_engine/src/types/transactions.rs b/indexer/indexer_rules_engine/src/types/transactions.rs deleted file mode 100644 index 7f9ddd30b..000000000 --- a/indexer/indexer_rules_engine/src/types/transactions.rs +++ /dev/null @@ -1,20 +0,0 @@ -use borsh::{BorshDeserialize, BorshSerialize}; -use near_lake_framework::near_indexer_primitives::{views, IndexerTransactionWithOutcome}; -use serde::{Deserialize, Serialize}; - -#[derive(BorshSerialize, BorshDeserialize, Serialize, Deserialize, Debug, Clone)] -pub struct TransactionDetails { - pub transaction: views::SignedTransactionView, - pub receipts: Vec, - pub execution_outcomes: Vec, -} - -impl TransactionDetails { - pub fn from_indexer_tx(transaction: IndexerTransactionWithOutcome) -> Self { - Self { - transaction: transaction.transaction.clone(), - receipts: vec![], - execution_outcomes: vec![transaction.outcome.execution_outcome], - } - } -} diff --git a/indexer/queryapi_coordinator/Cargo.toml b/indexer/queryapi_coordinator/Cargo.toml deleted file mode 100644 index d40f4822f..000000000 --- a/indexer/queryapi_coordinator/Cargo.toml +++ /dev/null @@ -1,45 +0,0 @@ -[package] -name = "queryapi_coordinator" -version = "0.1.0" -edition = "2021" -authors = ["Near Inc "] - -[dependencies] -anyhow = "1.0.57" -actix-web = "=4.0.1" -aws-config = "0.53.0" -borsh = "0.10.2" -cached = "0.23.0" -chrono = "0.4.25" -futures = "0.3.5" -itertools = "0.9.0" -lazy_static = "^1.4" -prometheus = "0.13.0" -serde = { version = "1", features = ["derive"] } -serde_json = "1.0.55" -tokio = { version = "1.1", features = ["sync", "time", "macros", "rt-multi-thread"] } -tokio-util = "0.6.7" -tokio-stream = { version = "0.1" } -tracing = "0.1.34" - -storage = { path = '../storage' } -indexer_rule_type = { path = '../indexer_rule_type' } -indexer_rules_engine = { path = '../indexer_rules_engine' } - -near-jsonrpc-client = "0.5.1" -near-jsonrpc-primitives = "0.16.0" -near-lake-framework = "0.7.1" -mockall = "0.9.1" -regex = "1" - -# opts -base64 = "0.13.0" -clap = { version = "3.1.6", features = ["derive", "env"] } -dotenv = "0.15.0" -tracing-subscriber = "0.2.4" -unescape = "0.1.0" - -# aws -aws-types = "0.53.0" -aws-credential-types = "0.53.0" -aws-sdk-s3 = "0.23.0" diff --git a/indexer/queryapi_coordinator/README.md b/indexer/queryapi_coordinator/README.md deleted file mode 100644 index 9cf8bd47f..000000000 --- a/indexer/queryapi_coordinator/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# QueryApi-mvp QueryApi-Coordinator app -This app polls for new Lake blocks in S3 and processes them: - * indexing changes to the QueryApi registry contract; - * running filter rules against incoming blocks; - * enqueing indexer functions to be processed. - -## Deployment to GCP -Build a new linux image and push it to GCP container registry. -`docker buildx build --platform linux/amd64 --push -t us-central1-docker.pkg.dev/pagoda-data-stack-dev/queryapi/queryapi-coordinator .` - -To redeploy the Compute Engine instance / container, -see terraform scripts https://github.com/near/near-ops/tree/master/provisioning/terraform/data_stack/queryapi/pagoda_data_stack_dev -`gcloud auth login` -`terraform apply` - -### Infrastructure Dependencies -This app requires: - * a connection to a database containing "alert" rules to match blocks against; - * a redis server where identifiers of processed blocks are stored; diff --git a/indexer/queryapi_coordinator/src/historical_block_processing.rs b/indexer/queryapi_coordinator/src/historical_block_processing.rs deleted file mode 100644 index 17155d1e8..000000000 --- a/indexer/queryapi_coordinator/src/historical_block_processing.rs +++ /dev/null @@ -1,430 +0,0 @@ -use crate::indexer_types::IndexerFunction; -use crate::s3; -use anyhow::{bail, Context}; -use aws_sdk_s3::Client as S3Client; -use chrono::{DateTime, LocalResult, TimeZone, Utc}; -use indexer_rule_type::indexer_rule::MatchingRule; -use indexer_rules_engine::types::indexer_rule_match::ChainId; -use near_jsonrpc_client::JsonRpcClient; -use near_jsonrpc_primitives::types::blocks::RpcBlockRequest; -use near_lake_framework::near_indexer_primitives::types::{BlockHeight, BlockId, BlockReference}; -use serde_json::from_str; -use tokio::task::JoinHandle; - -pub const MAX_RPC_BLOCKS_TO_PROCESS: u8 = 20; -pub const UNINDEXED_BLOCKS_SOFT_LIMIT: u64 = 7200; - -pub struct Task { - handle: JoinHandle<()>, - cancellation_token: tokio_util::sync::CancellationToken, -} - -/// Represents the async task used to process and push historical messages -pub struct Streamer { - task: Option, -} - -impl Streamer { - pub fn new() -> Self { - Streamer { task: None } - } - - pub fn start( - &mut self, - current_block_height: BlockHeight, - indexer: IndexerFunction, - redis_connection_manager: storage::ConnectionManager, - s3_client: S3Client, - chain_id: ChainId, - json_rpc_client: JsonRpcClient, - ) -> anyhow::Result<()> { - if self.task.is_some() { - return Err(anyhow::anyhow!("Streamer has already been started",)); - } - - let cancellation_token = tokio_util::sync::CancellationToken::new(); - let cancellation_token_clone = cancellation_token.clone(); - - let handle = tokio::spawn(async move { - tokio::select! { - _ = cancellation_token_clone.cancelled() => { - tracing::info!( - target: crate::INDEXER, - "Cancelling existing historical backfill for indexer: {}", - indexer.get_full_name(), - ); - }, - _ = process_historical_messages_or_handle_error( - current_block_height, - indexer.clone(), - &redis_connection_manager, - &s3_client, - &chain_id, - &json_rpc_client, - ) => { - tracing::info!( - target: crate::INDEXER, - "Finished historical backfill for indexer: {}", - indexer.get_full_name(), - ); - } - } - }); - - self.task = Some(Task { - handle, - cancellation_token, - }); - - Ok(()) - } - - pub async fn cancel(&mut self) -> anyhow::Result<()> { - if let Some(task) = self.task.take() { - task.cancellation_token.cancel(); - task.handle.await?; - - return Ok(()); - } - - Err(anyhow::anyhow!( - "Attempted to cancel already cancelled, or not started, Streamer" - )) - } -} - -pub(crate) async fn process_historical_messages_or_handle_error( - current_block_height: BlockHeight, - indexer_function: IndexerFunction, - redis_connection_manager: &storage::ConnectionManager, - s3_client: &S3Client, - chain_id: &ChainId, - json_rpc_client: &JsonRpcClient, -) -> i64 { - match process_historical_messages( - current_block_height, - indexer_function, - redis_connection_manager, - s3_client, - chain_id, - json_rpc_client, - ) - .await - { - Ok(block_difference) => block_difference, - Err(err) => { - // todo: when Coordinator can send log messages to Runner, send this error to Runner - tracing::error!( - target: crate::INDEXER, - "Error processing historical messages: {:?}", - err - ); - 0 - } - } -} -pub(crate) async fn process_historical_messages( - current_block_height: BlockHeight, - indexer_function: IndexerFunction, - redis_connection_manager: &storage::ConnectionManager, - s3_client: &S3Client, - chain_id: &ChainId, - json_rpc_client: &JsonRpcClient, -) -> anyhow::Result { - let start_block = indexer_function.start_block_height.unwrap(); - let block_difference: i64 = (current_block_height - start_block) as i64; - match block_difference { - i64::MIN..=-1 => { - bail!( - "Skipping back fill, start_block_height is greater than current block height: {}", - indexer_function.get_full_name(), - ); - } - 0 => { - bail!( - "Skipping back fill, start_block_height is equal to current block height: {}", - indexer_function.get_full_name(), - ); - } - 1..=i64::MAX => { - tracing::info!( - target: crate::INDEXER, - "Back filling {block_difference} blocks from {start_block} to current block height {current_block_height}: {}", - indexer_function.get_full_name(), - ); - - storage::del( - redis_connection_manager, - storage::generate_historical_stream_key(&indexer_function.get_full_name()), - ) - .await?; - storage::sadd( - redis_connection_manager, - storage::STREAMS_SET_KEY, - storage::generate_historical_stream_key(&indexer_function.get_full_name()), - ) - .await?; - storage::set( - redis_connection_manager, - storage::generate_historical_storage_key(&indexer_function.get_full_name()), - serde_json::to_string(&indexer_function)?, - None, - ) - .await?; - - let start_date = - lookup_block_date_or_next_block_date(start_block, json_rpc_client).await?; - - let last_indexed_block = last_indexed_block_from_metadata(s3_client).await?; - - let blocks_from_index = filter_matching_blocks_from_index_files( - start_block, - &indexer_function, - s3_client, - start_date, - ) - .await?; - - tracing::info!( - target: crate::INDEXER, - "Flushing {} block heights from index files to historical Stream for indexer: {}", - blocks_from_index.len(), - indexer_function.get_full_name(), - ); - - for block in &blocks_from_index { - storage::xadd( - redis_connection_manager, - storage::generate_historical_stream_key(&indexer_function.get_full_name()), - &[("block_height", block)], - ) - .await?; - } - - // Check for the case where an index file is written right after we get the last_indexed_block metadata - let last_block_in_data = blocks_from_index.last().unwrap_or(&start_block); - let last_indexed_block = if last_block_in_data > &last_indexed_block { - *last_block_in_data - } else { - last_indexed_block - }; - - let unindexed_block_difference = current_block_height - last_indexed_block; - - tracing::info!( - target: crate::INDEXER, - "Filtering {} unindexed blocks from lake: from block {last_indexed_block} to {current_block_height} for indexer: {}", - unindexed_block_difference, - indexer_function.get_full_name(), - ); - - if unindexed_block_difference > UNINDEXED_BLOCKS_SOFT_LIMIT { - tracing::warn!( - target: crate::INDEXER, - "Unindexed block difference exceeds soft limit of: {UNINDEXED_BLOCKS_SOFT_LIMIT} for indexer: {}", - indexer_function.get_full_name(), - ); - } - - let lake_config = match &chain_id { - ChainId::Mainnet => near_lake_framework::LakeConfigBuilder::default().mainnet(), - ChainId::Testnet => near_lake_framework::LakeConfigBuilder::default().testnet(), - } - .start_block_height(last_indexed_block) - .build() - .context("Failed to build lake config")?; - - let (sender, mut stream) = near_lake_framework::streamer(lake_config); - - let mut filtered_block_count = 0; - while let Some(streamer_message) = stream.recv().await { - let block_height = streamer_message.block.header.height; - if block_height == current_block_height { - break; - } - - let matches = indexer_rules_engine::reduce_indexer_rule_matches( - &indexer_function.indexer_rule, - &streamer_message, - chain_id.clone(), - ); - - if !matches.is_empty() { - filtered_block_count += 1; - - storage::xadd( - redis_connection_manager, - storage::generate_historical_stream_key(&indexer_function.get_full_name()), - &[("block_height", block_height)], - ) - .await?; - } - } - drop(sender); - - tracing::info!( - target: crate::INDEXER, - "Flushed {} unindexed block heights to historical Stream for indexer: {}", - filtered_block_count, - indexer_function.get_full_name(), - ); - } - } - Ok(block_difference) -} - -pub(crate) async fn last_indexed_block_from_metadata( - s3_client: &S3Client, -) -> anyhow::Result { - let key = format!( - "{}/{}", - s3::INDEXED_ACTIONS_FILES_FOLDER, - "latest_block.json" - ); - let metadata = - s3::fetch_text_file_from_s3(s3::INDEXED_DATA_FILES_BUCKET, key, s3_client).await?; - - let metadata: serde_json::Value = serde_json::from_str(&metadata).unwrap(); - let last_indexed_block = metadata["last_indexed_block"].clone(); - let last_indexed_block = last_indexed_block - .as_str() - .context("No last_indexed_block found in latest_block.json")?; - let last_indexed_block = - from_str(last_indexed_block).context("last_indexed_block couldn't be converted to u64")?; - tracing::info!( - target: crate::INDEXER, - "Last indexed block from latest_block.json: {:?}", - last_indexed_block - ); - Ok(last_indexed_block) -} - -pub(crate) async fn filter_matching_blocks_from_index_files( - start_block_height: BlockHeight, - indexer_function: &IndexerFunction, - s3_client: &S3Client, - start_date: DateTime, -) -> anyhow::Result> { - let s3_bucket = s3::INDEXED_DATA_FILES_BUCKET; - - let mut needs_dedupe_and_sort = false; - let indexer_rule = &indexer_function.indexer_rule; - - let index_files_content = match &indexer_rule.matching_rule { - MatchingRule::ActionAny { - affected_account_id, - .. - } => { - if affected_account_id.contains('*') || affected_account_id.contains(',') { - needs_dedupe_and_sort = true; - } - s3::fetch_contract_index_files( - s3_client, - s3_bucket, - s3::INDEXED_ACTIONS_FILES_FOLDER, - start_date, - affected_account_id, - ) - .await - } - MatchingRule::ActionFunctionCall { .. } => { - bail!("ActionFunctionCall matching rule not yet supported for historical processing, function: {:?} {:?}", indexer_function.account_id, indexer_function.function_name); - } - MatchingRule::Event { .. } => { - bail!("Event matching rule not yet supported for historical processing, function {:?} {:?}", indexer_function.account_id, indexer_function.function_name); - } - }?; - - tracing::info!( - target: crate::INDEXER, - "Found {file_count} index files for function {:?} {:?} with matching rule {indexer_rule:?}", - indexer_function.account_id, - indexer_function.function_name, - file_count = index_files_content.len() - ); - let mut blocks_to_process: Vec = - parse_blocks_from_index_files(index_files_content, start_block_height); - if needs_dedupe_and_sort { - blocks_to_process.sort(); - blocks_to_process.dedup(); - } - tracing::info!( - target: crate::INDEXER, - "Found {block_count} indexed blocks to process for function {:?} {:?}", - indexer_function.account_id, - indexer_function.function_name, - block_count = blocks_to_process.len() - ); - - Ok(blocks_to_process) -} - -fn parse_blocks_from_index_files( - index_files_content: Vec, - start_block_height: u64, -) -> Vec { - index_files_content - .into_iter() - .flat_map(|file_content| { - if let Ok(file_json) = serde_json::from_str::(&file_content) { - if let Some(block_heights) = file_json["heights"].as_array() { - block_heights - .iter() - .map(|block_height| block_height.as_u64().unwrap()) - .collect::>() - .into_iter() - .filter(|block_height| block_height >= &start_block_height) - .collect() - } else { - tracing::error!( - target: crate::INDEXER, - "Unable to parse index file, no heights found: {:?}", - file_content - ); - vec![] - } - } else { - tracing::error!( - target: crate::INDEXER, - "Unable to parse index file: {:?}", - file_content - ); - vec![] - } - }) - .collect::>() -} - -// if block does not exist, try next block, up to MAX_RPC_BLOCKS_TO_PROCESS (20) blocks -pub async fn lookup_block_date_or_next_block_date( - block_height: u64, - client: &JsonRpcClient, -) -> anyhow::Result> { - let mut current_block_height = block_height; - let mut retry_count = 0; - loop { - let request = RpcBlockRequest { - block_reference: BlockReference::BlockId(BlockId::Height(current_block_height)), - }; - - match client.call(request).await { - Ok(response) => { - let header = response.header; - let timestamp_nanosec = header.timestamp_nanosec; - return match Utc.timestamp_opt((timestamp_nanosec / 1000000000) as i64, 0) { - LocalResult::Single(date) => Ok(date), - LocalResult::Ambiguous(date, _) => Ok(date), - LocalResult::None => Err(anyhow::anyhow!("Unable to get block timestamp")), - }; - } - Err(_) => { - tracing::debug!("RPC failed to get block: {:?}", current_block_height); - retry_count += 1; - if retry_count > MAX_RPC_BLOCKS_TO_PROCESS { - return Err(anyhow::anyhow!("Unable to get block")); - } - current_block_height += 1; - } - } - } -} diff --git a/indexer/queryapi_coordinator/src/historical_block_processing_integration_tests.rs b/indexer/queryapi_coordinator/src/historical_block_processing_integration_tests.rs deleted file mode 100644 index 7b1ad38ed..000000000 --- a/indexer/queryapi_coordinator/src/historical_block_processing_integration_tests.rs +++ /dev/null @@ -1,206 +0,0 @@ -#[cfg(test)] -mod tests { - use crate::historical_block_processing::filter_matching_blocks_from_index_files; - use crate::indexer_types::IndexerFunction; - use crate::opts::{ChainId, Opts, StartOptions}; - use crate::{historical_block_processing, opts}; - use chrono::{DateTime, NaiveDate, Utc}; - use indexer_rule_type::indexer_rule::{IndexerRule, IndexerRuleKind, MatchingRule, Status}; - use near_lake_framework::near_indexer_primitives::types::BlockHeight; - use std::env; - use std::ops::Range; - - impl Opts { - pub fn test_opts_with_aws() -> Self { - dotenv::dotenv().ok(); - Opts { - aws_access_key_id: env::var("AWS_ACCESS_KEY_ID").unwrap(), - aws_secret_access_key: env::var("AWS_SECRET_ACCESS_KEY").unwrap(), - aws_region: "eu-central-1".to_string(), - redis_connection_string: env::var("REDIS_CONNECTION_STRING").unwrap(), - registry_contract_id: "".to_string(), - port: 0, - chain_id: ChainId::Mainnet(StartOptions::FromLatest), - } - } - } - - /// Parses some env vars from .env, Run with - /// cargo test historical_block_processing_integration_tests::test_indexing_metadata_file; - #[tokio::test] - #[ignore] - async fn test_indexing_metadata_file() { - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let last_indexed_block = - historical_block_processing::last_indexed_block_from_metadata(&s3_client) - .await - .unwrap(); - let a: Range = 90000000..9000000000; // valid for the next 300 years - assert!(a.contains(&last_indexed_block)); - } - - /// Parses some env vars from .env, Run with - /// cargo test historical_block_processing_integration_tests::test_process_historical_messages; - #[tokio::test] - #[ignore] - async fn test_process_historical_messages() { - opts::init_tracing(); - - let contract = "queryapi.dataplatform.near"; - let matching_rule = MatchingRule::ActionAny { - affected_account_id: contract.to_string(), - status: Status::Any, - }; - let filter_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule, - id: None, - name: None, - }; - let indexer_function = IndexerFunction { - account_id: "buildnear.testnet".to_string().parse().unwrap(), - function_name: "index_stuff".to_string(), - code: "".to_string(), - start_block_height: Some(85376002), - schema: None, - provisioned: false, - indexer_rule: filter_rule, - }; - - let opts = Opts::test_opts_with_aws(); - - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let redis_connection_manager = storage::connect(&opts.redis_connection_string) - .await - .unwrap(); - - let json_rpc_client = near_jsonrpc_client::JsonRpcClient::connect(opts.rpc_url()); - - let fake_block_height = - historical_block_processing::last_indexed_block_from_metadata(&s3_client) - .await - .unwrap(); - let result = historical_block_processing::process_historical_messages( - fake_block_height + 1, - indexer_function, - &redis_connection_manager, - &s3_client, - &opts.chain_id(), - &json_rpc_client, - ) - .await; - assert!(result.unwrap() > 0); - } - - /// Parses some env vars from .env, Run with - /// cargo test historical_block_processing_integration_tests::test_filter_matching_wildcard_blocks_from_index_files; - #[tokio::test] - #[ignore] - async fn test_filter_matching_wildcard_blocks_from_index_files() { - let contract = "*.keypom.near"; - let matching_rule = MatchingRule::ActionAny { - affected_account_id: contract.to_string(), - status: Status::Any, - }; - let filter_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule, - id: None, - name: None, - }; - let indexer_function = IndexerFunction { - account_id: "buildnear.testnet".to_string().parse().unwrap(), - function_name: "index_stuff".to_string(), - code: "".to_string(), - start_block_height: Some(85376002), - schema: None, - provisioned: false, - indexer_rule: filter_rule, - }; - - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let start_block_height = 77016214; - let naivedatetime_utc = NaiveDate::from_ymd_opt(2022, 10, 3) - .unwrap() - .and_hms_opt(0, 0, 0) - .unwrap(); - let datetime_utc = DateTime::::from_utc(naivedatetime_utc, Utc); - let blocks = filter_matching_blocks_from_index_files( - start_block_height, - &indexer_function, - &s3_client, - datetime_utc, - ) - .await; - - match blocks { - Ok(blocks) => { - // remove any blocks from after when the test was written - let fixed_blocks: Vec = - blocks.into_iter().filter(|&b| b <= 95175853u64).collect(); - println!("Found {} blocks", fixed_blocks.len()); - assert!(fixed_blocks.len() >= 71899); - } - Err(e) => { - println!("Error: {:?}", e); - panic!(); - } - } - } - - /// Parses some env vars from .env, Run with - /// cargo test historical_block_processing_integration_tests::test_filter_matching_blocks_from_index_files; - #[tokio::test] - #[ignore] - async fn test_filter_matching_blocks_from_index_files() { - let contract = "*.agency.near"; - let matching_rule = MatchingRule::ActionAny { - affected_account_id: contract.to_string(), - status: Status::Any, - }; - let filter_rule = IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule, - id: None, - name: None, - }; - let indexer_function = IndexerFunction { - account_id: "buildnear.testnet".to_string().parse().unwrap(), - function_name: "index_stuff".to_string(), - code: "".to_string(), - start_block_height: Some(85376002), - schema: None, - provisioned: false, - indexer_rule: filter_rule, - }; - - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let start_block_height = 45894620; - let naivedatetime_utc = NaiveDate::from_ymd_opt(2021, 8, 1) - .unwrap() - .and_hms_opt(0, 0, 0) - .unwrap(); - let datetime_utc = DateTime::::from_utc(naivedatetime_utc, Utc); - let blocks = filter_matching_blocks_from_index_files( - start_block_height, - &indexer_function, - &s3_client, - datetime_utc, - ) - .await; - let blocks = blocks.unwrap(); - - // remove any blocks from after when the test was written - let fixed_blocks: Vec = - blocks.into_iter().filter(|&b| b <= 95175853u64).collect(); - assert_eq!(fixed_blocks.len(), 197); // hackathon.agency.near = 45894627,45898423, hacker.agency.near = 45897358, hack.agency.near = 45894872,45895120,45896237 - } -} diff --git a/indexer/queryapi_coordinator/src/indexer_reducer.rs b/indexer/queryapi_coordinator/src/indexer_reducer.rs deleted file mode 100644 index fd5be8c7d..000000000 --- a/indexer/queryapi_coordinator/src/indexer_reducer.rs +++ /dev/null @@ -1,105 +0,0 @@ -use borsh::BorshDeserialize; - -use near_lake_framework::near_indexer_primitives::views::{ActionView, ReceiptEnumView}; -use near_lake_framework::near_indexer_primitives::{ - IndexerExecutionOutcomeWithReceipt, StreamerMessage, -}; - -use indexer_rule_type::indexer_rule::{IndexerRule, MatchingRule}; -use indexer_rules_engine::matcher; -use indexer_rules_engine::types::indexer_rule_match::ChainId; - -pub(crate) fn reduce_function_registry_from_outcomes( - indexer_rule: &IndexerRule, - streamer_message: &StreamerMessage, - chain_id: &ChainId, - block_height: u64, -) -> Vec { - let build_function_call_info_vector = streamer_message - .shards - .iter() - .flat_map(|shard| { - shard - .receipt_execution_outcomes - .iter() - .filter(|receipt_execution_outcome| { - matcher::matches(&indexer_rule.matching_rule, receipt_execution_outcome) - }) - }) - .map(|receipt_execution_outcome| { - build_registry_info( - indexer_rule, - receipt_execution_outcome, - chain_id, - block_height, - ) - }); - - build_function_call_info_vector.flatten().collect() -} - -#[derive(BorshDeserialize, Debug)] -pub struct FunctionCallInfo { - pub chain_id: ChainId, - pub indexer_rule_id: u32, - pub indexer_rule_name: String, - pub signer_id: String, - pub method_name: String, - pub args: String, - pub block_height: u64, -} - -fn build_registry_info( - indexer_rule: &IndexerRule, - receipt_execution_outcome: &IndexerExecutionOutcomeWithReceipt, - chain_id: &ChainId, - block_height: u64, -) -> Vec { - if let ReceiptEnumView::Action { - actions, signer_id, .. - } = &receipt_execution_outcome.receipt.receipt - { - actions - .iter() - .filter(|action| { - if let ActionView::FunctionCall { method_name, .. } = action { - if let MatchingRule::ActionFunctionCall { function, .. } = - &indexer_rule.matching_rule - { - function.eq(method_name) - } else { - false - } - } else { - false - } - }) - .flat_map(|action| { - if let ActionView::FunctionCall { - method_name, args, .. - } = action - { - match std::str::from_utf8(args) { - Ok(args) => Some(FunctionCallInfo { - chain_id: chain_id.clone(), - indexer_rule_id: indexer_rule.id.unwrap_or(0), - indexer_rule_name: indexer_rule.name.clone().unwrap_or("".to_string()), - signer_id: signer_id.to_string(), - method_name: method_name.to_string(), - args: args.to_string(), - block_height, - }), - Err(_) => { - tracing::error!("Failed to deserialize args"); - None - } - } - } else { - None - } - }) - .collect() - } else { - panic!("Not an action receipt") - } -} diff --git a/indexer/queryapi_coordinator/src/indexer_registry.rs b/indexer/queryapi_coordinator/src/indexer_registry.rs deleted file mode 100644 index 3df9cdd0b..000000000 --- a/indexer/queryapi_coordinator/src/indexer_registry.rs +++ /dev/null @@ -1,414 +0,0 @@ -use crate::QueryApiContext; -use near_jsonrpc_client::JsonRpcClient; -use near_jsonrpc_primitives::types::query::{QueryResponseKind, RpcQueryRequest}; -use near_lake_framework::near_indexer_primitives::types::BlockReference::Finality; -use near_lake_framework::near_indexer_primitives::types::Finality::Final; -use near_lake_framework::near_indexer_primitives::types::{AccountId, BlockHeight, FunctionArgs}; -use near_lake_framework::near_indexer_primitives::views::QueryRequest; -use serde_json::{json, Value}; -use std::collections::hash_map::Entry; -use std::collections::HashMap; -use unescape::unescape; - -use crate::indexer_reducer; -use crate::indexer_reducer::FunctionCallInfo; -use crate::indexer_types::{IndexerFunction, IndexerRegistry}; -use indexer_rule_type::indexer_rule::{IndexerRule, IndexerRuleKind, MatchingRule, Status}; - -struct RegistryFunctionInvocation { - pub account_id: AccountId, - pub function_name: String, -} - -fn build_indexer_function( - function_config: &Value, - function_name: String, - account_id: String, - indexer_rule: &IndexerRule, -) -> Option { - let code = function_config["code"].as_str(); - - if let Some(c) = code { - Some(IndexerFunction { - account_id: account_id.parse().unwrap(), - function_name, - code: c.to_string(), - start_block_height: function_config["start_block_height"].as_u64(), - schema: function_config["schema"].as_str().map(String::from), - provisioned: false, - indexer_rule: indexer_rule.clone(), - }) - } else { - tracing::warn!( - "No code found for account {} function {}", - account_id, - function_name - ); - None - } -} - -pub(crate) fn build_registry_from_json(raw_registry: Value) -> IndexerRegistry { - let mut registry: IndexerRegistry = HashMap::new(); - let raw_registry = raw_registry.as_object().unwrap(); - let raw_registry = raw_registry["All"].as_object().unwrap(); - - for (account, functions) in raw_registry { - let mut fns = HashMap::new(); - for (function_name, function_config) in functions.as_object().unwrap() { - let indexer_rule = match serde_json::from_value(function_config["filter"].clone()) { - Ok(indexer_rule) => indexer_rule, - Err(e) => { - tracing::error!( - "Error parsing indexer_rule filter for account {} function {}: {}", - account, - function_name, - e - ); - continue; - } - }; - - let idx_fn = match build_indexer_function( - function_config, - function_name.to_string(), - account.to_string().parse().unwrap(), - &indexer_rule, - ) { - Some(idx_fn) => idx_fn, - None => continue, - }; - fns.insert(function_name.clone(), idx_fn); - } - registry.insert(account.parse().unwrap(), fns); - } - registry -} - -/// Returns spawned start_from_block threads -pub(crate) async fn index_registry_changes( - current_block_height: BlockHeight, - context: &QueryApiContext<'_>, - denylist: &crate::Denylist, -) -> anyhow::Result<()> { - index_and_process_remove_calls(context).await; - - index_and_process_register_calls(current_block_height, context, denylist).await -} - -async fn index_and_process_register_calls( - current_block_height: BlockHeight, - context: &QueryApiContext<'_>, - denylist: &crate::Denylist, -) -> anyhow::Result<()> { - let registry_method_name = "register_indexer_function"; - let registry_calls_rule = - build_registry_indexer_rule(registry_method_name, context.registry_contract_id); - let registry_updates = indexer_reducer::reduce_function_registry_from_outcomes( - ®istry_calls_rule, - &context.streamer_message, - context.chain_id, - context.streamer_message.block.header.height, - ); - - if !registry_updates.is_empty() { - for update in registry_updates { - let new_indexer_function = build_indexer_function_from_args( - parse_indexer_function_args(&update), - update.signer_id, - ); - - match new_indexer_function { - None => continue, - Some(mut new_indexer_function) => { - let account_in_deny_list = denylist - .iter() - .find(|entry| entry.account_id == new_indexer_function.account_id); - - if let Some(account_in_deny_list) = account_in_deny_list { - tracing::info!( - "Ignoring registered indexer {} from deny list", - new_indexer_function.get_full_name() - ); - - if !account_in_deny_list.v1_ack { - crate::acknowledge_account_in_denylist( - new_indexer_function.account_id, - context.redis_url, - )?; - } - - continue; - } - - let mut indexer_registry_lock = context.indexer_registry.lock().await; - let fns = indexer_registry_lock - .entry(new_indexer_function.account_id.clone()) - .or_default(); - - let functions = fns.get(new_indexer_function.function_name.as_str()); - match functions { - // if there is no existing function then we will insert the new one with the default state of provisioned = false - None => { - tracing::info!( - target: crate::INDEXER, - "Block {}. Indexed creation call to {registry_method_name}: {:?} {:?}", - current_block_height, - new_indexer_function.account_id.clone(), - new_indexer_function.function_name.clone() - ); - } - - // if there is an existing function then respond to any changed fields - Some(old_indexer_function) => { - tracing::info!( - target: crate::INDEXER, - "Block {}. Indexed update call to {registry_method_name}: {:?} {:?}", - current_block_height, - new_indexer_function.account_id.clone(), - new_indexer_function.function_name.clone(), - ); - - if old_indexer_function.schema == new_indexer_function.schema { - new_indexer_function.provisioned = true; - } - } - } - - if new_indexer_function.start_block_height.is_some() { - let mut streamers_lock = context.streamers.lock().await; - - if let Some(mut existing_streamer) = - streamers_lock.remove(&new_indexer_function.get_full_name()) - { - existing_streamer.cancel().await?; - } - - let mut streamer = crate::historical_block_processing::Streamer::new(); - - streamer.start( - current_block_height, - new_indexer_function.clone(), - context.redis_connection_manager.clone(), - context.s3_client.clone(), - context.chain_id.clone(), - context.json_rpc_client.clone(), - )?; - - streamers_lock.insert(new_indexer_function.get_full_name(), streamer); - } - - storage::set( - context.redis_connection_manager, - storage::generate_real_time_storage_key( - &new_indexer_function.get_full_name(), - ), - serde_json::to_string(&new_indexer_function.clone())?, - None, - ) - .await?; - - fns.insert( - new_indexer_function.function_name.clone(), - new_indexer_function, - ); - } - }; - } - } - - Ok(()) -} - -async fn index_and_process_remove_calls(context: &QueryApiContext<'_>) { - let registry_method_name = "remove_indexer_function"; - let registry_calls_rule = - build_registry_indexer_rule(registry_method_name, context.registry_contract_id); - let registry_updates = indexer_reducer::reduce_function_registry_from_outcomes( - ®istry_calls_rule, - &context.streamer_message, - context.chain_id, - context.streamer_message.block.header.height, - ); - - if !registry_updates.is_empty() { - for update in registry_updates { - let function_invocation: Option = - build_function_invocation_from_args( - parse_indexer_function_args(&update), - update.signer_id, - ); - match function_invocation { - None => continue, - Some(function_invocation) => { - tracing::info!( - target: crate::INDEXER, - "indexed removal call to {registry_method_name}: {:?} {:?}", - function_invocation.account_id.clone(), - function_invocation.function_name.clone(), - ); - match context - .indexer_registry - .lock() - .await - .entry(function_invocation.account_id.clone()) - { - Entry::Vacant(_) => {} - Entry::Occupied(mut fns) => { - fns.get_mut() - .remove(function_invocation.function_name.as_str()); - } - } - // todo request removal of DB schema - } - } - } - } -} - -fn build_function_invocation_from_args( - args: Option, - signer_id: String, -) -> Option { - match args { - None => None, - Some(args) => { - let account_id: String = match args["account_id"] { - Value::String(ref account_id) => account_id.clone(), - _ => signer_id, - }; - Some(RegistryFunctionInvocation { - account_id: account_id.parse().unwrap(), - function_name: args["function_name"].as_str().unwrap().to_string(), - }) - } - } -} - -fn build_indexer_function_from_args( - args: Option, - signer_id: String, -) -> Option { - match args { - None => None, - Some(args) => { - let account_id: String = match args["account_id"] { - Value::String(ref account_id) => account_id.clone(), - _ => signer_id, - }; - let function_name = args["function_name"].as_str(); - match function_name { - None => { - tracing::warn!( - "Unable to parse function_name from indexer function: {:?}", - &args - ); - None - } - Some(function_name) => match unescape(&args["filter_json"].to_string()) { - Some(filter_string) => { - let filter_json_strip_quotes = &filter_string[1..filter_string.len() - 1]; - match serde_json::from_str(filter_json_strip_quotes) { - Ok(filter_json) => match serde_json::from_value(filter_json) { - Ok(indexer_rule) => build_indexer_function( - &args, - function_name.to_string(), - account_id, - &indexer_rule, - ), - Err(e) => { - tracing::warn!("Error parsing filter into indexer_rule for account {} function {}: {}, {}", account_id, function_name, e, filter_string); - None - } - }, - Err(e) => { - tracing::warn!("Error parsing indexer_rule filter for account {} function {}: {}, {}", account_id, function_name, e, filter_string); - None - } - } - } - None => { - tracing::warn!( - "Unable to unescape filter_json from registration args: {:?}", - &args - ); - None - } - }, - } - } - } -} - -fn parse_indexer_function_args(update: &FunctionCallInfo) -> Option { - if let Ok(args_json) = serde_json::from_str(&update.args) { - return Some(args_json); - } else { - tracing::error!( - "Unable to json parse arguments to indexer function: {:?}", - &update.method_name - ); - } - None -} - -fn build_registry_indexer_rule( - registry_method_name: &str, - registry_contract_id: &str, -) -> IndexerRule { - let matching_rule = MatchingRule::ActionFunctionCall { - affected_account_id: registry_contract_id.to_string(), - function: registry_method_name.to_string(), - status: Status::Success, - }; - IndexerRule { - id: None, - name: Some(format!("{}{}", registry_method_name, "_changes")), - indexer_rule_kind: IndexerRuleKind::Action, - matching_rule, - } -} - -pub async fn read_indexer_functions_from_registry( - rpc_client: &JsonRpcClient, - registry_contract_id: &str, -) -> Value { - match read_only_call( - rpc_client, - registry_contract_id, - "list_indexer_functions", - FunctionArgs::from(json!({}).to_string().into_bytes()), - ) - .await - { - Ok(functions) => functions, - Err(err) => { - panic!("Unable to read indexer functions from registry: {:?}", err); - } - } -} - -async fn read_only_call( - client: &JsonRpcClient, - contract_name: &str, - function_name: &str, - args: FunctionArgs, -) -> Result { - let account_id: AccountId = contract_name.parse()?; - - let request = RpcQueryRequest { - block_reference: Finality(Final), - request: QueryRequest::CallFunction { - account_id, - method_name: function_name.to_string(), - args, - }, - }; - - let response = client.call(request).await?; - - if let QueryResponseKind::CallResult(result) = response.kind { - return Ok(serde_json::from_str(std::str::from_utf8(&result.result).unwrap()).unwrap()); - } - Err(anyhow::anyhow!("Unable to make rpc call: {:?}", response)) -} diff --git a/indexer/queryapi_coordinator/src/indexer_types.rs b/indexer/queryapi_coordinator/src/indexer_types.rs deleted file mode 100644 index ea075866f..000000000 --- a/indexer/queryapi_coordinator/src/indexer_types.rs +++ /dev/null @@ -1,29 +0,0 @@ -use indexer_rule_type::indexer_rule::IndexerRule; -use near_lake_framework::near_indexer_primitives::types::AccountId; -use std::collections::HashMap; - -pub type IndexerRegistry = HashMap>; - -#[derive( - borsh::BorshSerialize, - borsh::BorshDeserialize, - serde::Serialize, - serde::Deserialize, - Clone, - Debug, -)] -pub struct IndexerFunction { - pub account_id: AccountId, - pub function_name: String, - pub code: String, - pub start_block_height: Option, - pub schema: Option, - pub provisioned: bool, - pub indexer_rule: IndexerRule, -} - -impl IndexerFunction { - pub fn get_full_name(&self) -> String { - format!("{}/{}", self.account_id, self.function_name) - } -} diff --git a/indexer/queryapi_coordinator/src/main.rs b/indexer/queryapi_coordinator/src/main.rs deleted file mode 100644 index 9f0ffbdf6..000000000 --- a/indexer/queryapi_coordinator/src/main.rs +++ /dev/null @@ -1,431 +0,0 @@ -use std::collections::HashMap; - -use anyhow::Context; -use futures::stream::{self, StreamExt}; -use near_jsonrpc_client::JsonRpcClient; -use storage::redis::{ErrorKind, RedisError}; -use tokio::sync::Mutex; - -use indexer_rules_engine::types::indexer_rule_match::{ChainId, IndexerRuleMatch}; -use near_lake_framework::near_indexer_primitives::types::{AccountId, BlockHeight}; -use near_lake_framework::near_indexer_primitives::StreamerMessage; -use utils::serialize_to_camel_case_json_string; - -use crate::indexer_types::IndexerFunction; -use indexer_types::IndexerRegistry; -use opts::{Opts, Parser}; -use storage::{self, generate_real_time_streamer_message_key, ConnectionManager}; - -mod historical_block_processing; -mod indexer_reducer; -mod indexer_registry; -mod indexer_types; -mod metrics; -mod opts; -mod s3; -mod utils; - -pub(crate) const INDEXER: &str = "queryapi_coordinator"; - -type SharedIndexerRegistry = std::sync::Arc>; - -type Streamers = std::sync::Arc>>; - -pub(crate) struct QueryApiContext<'a> { - pub streamer_message: near_lake_framework::near_indexer_primitives::StreamerMessage, - pub chain_id: &'a ChainId, - pub s3_client: &'a aws_sdk_s3::Client, - pub json_rpc_client: &'a JsonRpcClient, - pub registry_contract_id: &'a str, - pub redis_connection_manager: &'a ConnectionManager, - pub indexer_registry: &'a SharedIndexerRegistry, - pub streamers: &'a Streamers, - pub redis_url: &'a str, -} - -#[derive(serde::Deserialize, serde::Serialize, Debug)] -struct DenylistEntry { - account_id: AccountId, - v1_ack: bool, - migrated: bool, - failed: bool, - v2_control: bool, -} - -type Denylist = Vec; - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - opts::init_tracing(); - - opts::dotenv::dotenv().ok(); - - let opts = Opts::parse(); - - let chain_id = &opts.chain_id(); - let registry_contract_id = opts.registry_contract_id.clone(); - - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - tracing::info!(target: INDEXER, "Connecting to redis..."); - let redis_connection_manager = storage::connect(&opts.redis_connection_string).await?; - - let denylist = fetch_denylist(&redis_connection_manager).await?; - tracing::info!("Using denylist: {:#?}", denylist); - - let json_rpc_client = JsonRpcClient::connect(opts.rpc_url()); - - // fetch raw indexer functions for use in indexer - // Could this give us results from a newer block than the next block we receive from the Lake? - tracing::info!( - target: INDEXER, - "Fetching indexer functions from contract registry..." - ); - let indexer_functions = indexer_registry::read_indexer_functions_from_registry( - &json_rpc_client, - ®istry_contract_id, - ) - .await; - let indexer_functions = indexer_registry::build_registry_from_json(indexer_functions); - let indexer_functions = - filter_registry_by_denylist(indexer_functions, &denylist, &opts.redis_connection_string) - .await; - - let indexer_registry: SharedIndexerRegistry = - std::sync::Arc::new(Mutex::new(indexer_functions)); - - let streamers = std::sync::Arc::new(tokio::sync::Mutex::new(HashMap::new())); - - tracing::info!(target: INDEXER, "Generating LakeConfig..."); - let config: near_lake_framework::LakeConfig = opts.to_lake_config().await; - - tracing::info!(target: INDEXER, "Instantiating the stream...",); - let (sender, stream) = near_lake_framework::streamer(config); - - tokio::spawn(utils::stats(redis_connection_manager.clone())); - tokio::spawn(metrics::init_server(opts.port).expect("Failed to start metrics server")); - - tracing::info!(target: INDEXER, "Starting queryapi_coordinator...",); - let mut handlers = tokio_stream::wrappers::ReceiverStream::new(stream) - .map(|streamer_message| { - let context = QueryApiContext { - redis_connection_manager: &redis_connection_manager, - registry_contract_id: ®istry_contract_id, - streamer_message, - chain_id, - json_rpc_client: &json_rpc_client, - s3_client: &s3_client, - indexer_registry: &indexer_registry, - streamers: &streamers, - redis_url: &opts.redis_connection_string, - }; - - handle_streamer_message(context) - }) - .buffer_unordered(1usize); - - while let Some(handle_message) = handlers.next().await { - if let Err(err) = handle_message { - tracing::error!(target: INDEXER, "{:#?}", err); - } - } - drop(handlers); // close the channel so the sender will stop - - // propagate errors from the sender - match sender.await { - Ok(Ok(())) => Ok(()), - Ok(Err(e)) => Err(e), - Err(e) => Err(anyhow::Error::from(e)), // JoinError - } -} - -async fn fetch_denylist(redis_connection_manager: &ConnectionManager) -> anyhow::Result { - let raw_denylist: String = storage::get(redis_connection_manager, storage::DENYLIST_KEY) - .await - .unwrap_or("".to_owned()); - let denylist: Denylist = - serde_json::from_str(&raw_denylist).context("Failed to parse denylist")?; - - Ok(denylist) -} - -fn acknowledge_account_in_denylist(account_id: AccountId, redis_url: &str) -> anyhow::Result<()> { - storage::atomic_update( - redis_url, - &[storage::DENYLIST_KEY], - move |raw_denylist: String| { - let mut denylist: Denylist = serde_json::from_str(&raw_denylist).map_err(|_| { - RedisError::from((ErrorKind::TypeError, "failed to deserialize denylist")) - })?; - - let entry = denylist - .iter_mut() - .find(|entry| entry.account_id == account_id) - .unwrap(); - - entry.v1_ack = true; - - serde_json::to_string(&denylist).map_err(|_| { - RedisError::from((ErrorKind::TypeError, "failed to serialize denylist")) - }) - }, - ) -} - -async fn filter_registry_by_denylist( - indexer_registry: IndexerRegistry, - denylist: &Denylist, - redis_url: &str, -) -> IndexerRegistry { - let mut filtered_registry = HashMap::new(); - - for (account_id, indexer) in indexer_registry.into_iter() { - let account_in_deny_list = denylist.iter().find(|entry| entry.account_id == account_id); - - match account_in_deny_list { - Some(account_in_deny_list) => { - tracing::info!( - target: INDEXER, - "Ignoring {account_id} from denylist", - ); - - if !account_in_deny_list.v1_ack { - acknowledge_account_in_denylist(account_id, redis_url).unwrap(); - } - - continue; - } - None => { - filtered_registry.insert(account_id, indexer); - } - } - } - - filtered_registry -} - -async fn handle_streamer_message(context: QueryApiContext<'_>) -> anyhow::Result { - let denylist = fetch_denylist(context.redis_connection_manager).await?; - - let indexer_functions: Vec = { - let mut indexer_registry = context.indexer_registry.lock().await; - - *indexer_registry = - filter_registry_by_denylist(indexer_registry.clone(), &denylist, context.redis_url) - .await; - - indexer_registry - .clone() - .into_values() - .flat_map(|fns| fns.into_values()) - .collect() - }; - - let mut indexer_function_filter_matches_futures = stream::iter(indexer_functions.iter()) - .map(|indexer_function| { - reduce_rule_matches_for_indexer_function( - indexer_function, - &context.streamer_message, - context.chain_id.clone(), - ) - }) - // TODO: fix the buffer size used to accumulate results, it takes 10 vecs of vecs while we want to take 10 IndexerRuleMatches - .buffer_unordered(10usize); - - let block_height: BlockHeight = context.streamer_message.block.header.height; - - // Cache streamer message block and shards for use in real time processing - storage::set( - context.redis_connection_manager, - generate_real_time_streamer_message_key(block_height), - &serialize_to_camel_case_json_string(&context.streamer_message)?, - Some(60), - ) - .await?; - - indexer_registry::index_registry_changes(block_height, &context, &denylist).await?; - - while let Some(indexer_function_with_matches) = - indexer_function_filter_matches_futures.next().await - { - if let Ok(indexer_function_with_matches) = indexer_function_with_matches { - let indexer_function = indexer_function_with_matches.indexer_function; - let indexer_rule_matches = indexer_function_with_matches.matches; - - for _ in indexer_rule_matches.iter() { - tracing::debug!( - target: INDEXER, - "Matched filter {:?} for function {} {}", - indexer_function.indexer_rule.matching_rule, - indexer_function.account_id, - indexer_function.function_name, - ); - - if !indexer_function.provisioned { - set_provisioned_flag(context.indexer_registry, indexer_function).await; - } - - storage::sadd( - context.redis_connection_manager, - storage::STREAMS_SET_KEY, - storage::generate_real_time_stream_key(&indexer_function.get_full_name()), - ) - .await?; - storage::set( - context.redis_connection_manager, - storage::generate_real_time_storage_key(&indexer_function.get_full_name()), - serde_json::to_string(indexer_function)?, - None, - ) - .await?; - storage::xadd( - context.redis_connection_manager, - storage::generate_real_time_stream_key(&indexer_function.get_full_name()), - &[("block_height", block_height)], - ) - .await?; - storage::set( - context.redis_connection_manager, - storage::generate_block_stream_key(&indexer_function.get_full_name()), - block_height, - None, - ) - .await?; - } - } - } - - // cache last indexed block height - storage::update_last_indexed_block( - context.redis_connection_manager, - context.streamer_message.block.header.height, - ) - .await?; - - metrics::BLOCK_COUNT.inc(); - metrics::LATEST_BLOCK_HEIGHT.set( - context - .streamer_message - .block - .header - .height - .try_into() - .unwrap(), - ); - - Ok(context.streamer_message.block.header.height) -} - -async fn set_provisioned_flag( - indexer_registry: &SharedIndexerRegistry, - indexer_function: &IndexerFunction, -) { - match indexer_registry - .lock() - .await - .get_mut(&indexer_function.account_id) - { - Some(account_functions) => { - match account_functions.get_mut(&indexer_function.function_name) { - Some(indexer_function) => { - indexer_function.provisioned = true; - } - None => { - let keys = account_functions - .keys() - .map(|s| &**s) - .collect::>() - .join(", "); - tracing::error!( - target: INDEXER, - "Unable to set provisioning status, Indexer function with account_id {} and function_name {} not found in registry. Functions for this account are: {}", - indexer_function.account_id, - indexer_function.function_name, - keys - ); - } - } - } - None => { - tracing::error!( - target: INDEXER, - "Unable to set provisioning status, Indexer function account id '{}' not found in registry", - indexer_function.account_id - ); - } - } -} - -struct IndexerFunctionWithMatches<'b> { - pub indexer_function: &'b IndexerFunction, - pub matches: Vec, -} - -async fn reduce_rule_matches_for_indexer_function<'x>( - indexer_function: &'x IndexerFunction, - streamer_message: &StreamerMessage, - chain_id: ChainId, -) -> anyhow::Result> { - let matches = indexer_rules_engine::reduce_indexer_rule_matches( - &indexer_function.indexer_rule, - streamer_message, - chain_id.clone(), - ); - Ok(IndexerFunctionWithMatches { - indexer_function, - matches, - }) -} - -#[cfg(test)] -mod historical_block_processing_integration_tests; - -#[cfg(test)] -mod tests { - use super::*; - use indexer_rule_type::indexer_rule::{IndexerRule, IndexerRuleKind, MatchingRule, Status}; - use std::collections::HashMap; - - #[tokio::test] - async fn set_provisioning_finds_functions_in_registry() { - let mut indexer_registry = IndexerRegistry::new(); - let indexer_function = IndexerFunction { - account_id: "test_near".to_string().parse().unwrap(), - function_name: "test_indexer".to_string(), - code: "".to_string(), - start_block_height: None, - schema: None, - provisioned: false, - indexer_rule: IndexerRule { - indexer_rule_kind: IndexerRuleKind::Action, - id: None, - name: None, - matching_rule: MatchingRule::ActionAny { - affected_account_id: "social.near".to_string(), - status: Status::Success, - }, - }, - }; - - let mut functions: HashMap = HashMap::new(); - functions.insert( - indexer_function.function_name.clone(), - indexer_function.clone(), - ); - indexer_registry.insert(indexer_function.account_id.clone(), functions); - - let indexer_registry: SharedIndexerRegistry = - std::sync::Arc::new(Mutex::new(indexer_registry)); - - set_provisioned_flag(&indexer_registry, &indexer_function).await; - - let lock = indexer_registry.lock().await; - let account_functions = lock.get(&indexer_function.account_id).unwrap(); - let indexer_function = account_functions - .get(&indexer_function.function_name) - .unwrap(); - - assert!(indexer_function.provisioned); - } -} diff --git a/indexer/queryapi_coordinator/src/metrics.rs b/indexer/queryapi_coordinator/src/metrics.rs deleted file mode 100644 index f106a0624..000000000 --- a/indexer/queryapi_coordinator/src/metrics.rs +++ /dev/null @@ -1,58 +0,0 @@ -use actix_web::{get, App, HttpServer, Responder}; -use lazy_static::lazy_static; -use prometheus::{Encoder, IntCounter, IntGauge, Opts}; -use tracing::info; - -lazy_static! { - pub(crate) static ref LATEST_BLOCK_HEIGHT: IntGauge = try_create_int_gauge( - "queryapi_coordinator_latest_block_height", - "Height of last processed block" - ) - .unwrap(); - pub(crate) static ref BLOCK_COUNT: IntCounter = try_create_int_counter( - "queryapi_coordinator_block_count", - "Number of indexed blocks" - ) - .unwrap(); -} - -fn try_create_int_gauge(name: &str, help: &str) -> prometheus::Result { - let opts = Opts::new(name, help); - let gauge = IntGauge::with_opts(opts)?; - prometheus::register(Box::new(gauge.clone()))?; - Ok(gauge) -} - -fn try_create_int_counter(name: &str, help: &str) -> prometheus::Result { - let opts = Opts::new(name, help); - let counter = IntCounter::with_opts(opts)?; - prometheus::register(Box::new(counter.clone()))?; - Ok(counter) -} - -#[get("/metrics")] -async fn get_metrics() -> impl Responder { - let mut buffer = Vec::::new(); - let encoder = prometheus::TextEncoder::new(); - loop { - match encoder.encode(&prometheus::gather(), &mut buffer) { - Ok(_) => break, - Err(err) => { - eprintln!("{:?}", err); - } - } - } - String::from_utf8(buffer.clone()).unwrap() -} - -pub(crate) fn init_server(port: u16) -> anyhow::Result { - info!( - target: crate::INDEXER, - "Starting metrics server on http://0.0.0.0:{port}" - ); - - Ok(HttpServer::new(|| App::new().service(get_metrics)) - .bind(("0.0.0.0", port))? - .disable_signals() - .run()) -} diff --git a/indexer/queryapi_coordinator/src/opts.rs b/indexer/queryapi_coordinator/src/opts.rs deleted file mode 100644 index 83fb4f862..000000000 --- a/indexer/queryapi_coordinator/src/opts.rs +++ /dev/null @@ -1,171 +0,0 @@ -pub use base64; -pub use borsh::{self, BorshDeserialize, BorshSerialize}; -pub use clap::{Parser, Subcommand}; -pub use dotenv; -use tracing_subscriber::EnvFilter; - -use near_jsonrpc_client::{methods, JsonRpcClient}; -use near_lake_framework::near_indexer_primitives::types::{BlockReference, Finality}; - -#[derive(Parser, Debug, Clone)] -#[clap( - version, - author, - about, - disable_help_subcommand(true), - propagate_version(true), - next_line_help(true) -)] -pub struct Opts { - /// Connection string to connect to the Redis instance for cache. Default: "redis://127.0.0.1" - #[clap(long, default_value = "redis://127.0.0.1", env)] - pub redis_connection_string: String, - /// AWS Access Key with the rights to read from AWS S3 - #[clap(long, env)] - pub aws_access_key_id: String, - /// AWS Secret Access Key with the rights to read from AWS S3 - #[clap(long, env)] - pub aws_secret_access_key: String, - /// AWS Region to use for S3 - #[clap(long, env, default_value = "eu-central-1")] - pub aws_region: String, - /// Registry contract to use - #[clap(env)] - pub registry_contract_id: String, - /// Port to enable metrics/health service - #[clap(env, default_value_t = 4000)] - pub port: u16, - /// Chain ID: testnet or mainnet - #[clap(subcommand)] - pub chain_id: ChainId, -} - -#[derive(Subcommand, Debug, Clone)] -pub enum ChainId { - #[clap(subcommand)] - Mainnet(StartOptions), - #[clap(subcommand)] - Testnet(StartOptions), -} - -#[derive(Subcommand, Debug, Clone)] -#[allow(clippy::enum_variant_names)] -pub enum StartOptions { - FromBlock { height: u64 }, - FromInterruption, - FromLatest, -} - -impl Opts { - pub fn chain_id(&self) -> indexer_rules_engine::types::indexer_rule_match::ChainId { - match self.chain_id { - ChainId::Mainnet(_) => { - indexer_rules_engine::types::indexer_rule_match::ChainId::Mainnet - } - ChainId::Testnet(_) => { - indexer_rules_engine::types::indexer_rule_match::ChainId::Testnet - } - } - } - - /// Returns [StartOptions] for current [Opts] - pub fn start_options(&self) -> &StartOptions { - match &self.chain_id { - ChainId::Mainnet(start_options) | ChainId::Testnet(start_options) => start_options, - } - } - - pub fn rpc_url(&self) -> &str { - // To query metadata (timestamp) about blocks more than 5 epochs old we need an archival node - match self.chain_id { - ChainId::Mainnet(_) => "https://archival-rpc.mainnet.near.org", //https://rpc.mainnet.near.org", - ChainId::Testnet(_) => "https://archival-rpc.testnet.near.org", - } - } -} - -impl Opts { - pub async fn to_lake_config(&self) -> near_lake_framework::LakeConfig { - let config_builder = near_lake_framework::LakeConfigBuilder::default(); - - match &self.chain_id { - ChainId::Mainnet(_) => config_builder - .mainnet() - .start_block_height(get_start_block_height(self).await), - ChainId::Testnet(_) => config_builder - .testnet() - .start_block_height(get_start_block_height(self).await), - } - .build() - .expect("Failed to build LakeConfig") - } -} - -// TODO: refactor to read from Redis once `storage` is extracted to a separate crate -async fn get_start_block_height(opts: &Opts) -> u64 { - match opts.start_options() { - StartOptions::FromBlock { height } => *height, - StartOptions::FromInterruption => { - let redis_connection_manager = match storage::connect(&opts.redis_connection_string) - .await - { - Ok(connection_manager) => connection_manager, - Err(err) => { - tracing::warn!( - target: crate::INDEXER, - "Failed to connect to Redis to get last synced block, failing to the latest...\n{:#?}", - err, - ); - return final_block_height(opts).await; - } - }; - match storage::get_last_indexed_block(&redis_connection_manager).await { - Ok(last_indexed_block) => last_indexed_block, - Err(err) => { - tracing::warn!( - target: crate::INDEXER, - "Failed to get last indexer block from Redis. Failing to the latest one...\n{:#?}", - err - ); - final_block_height(opts).await - } - } - } - StartOptions::FromLatest => final_block_height(opts).await, - } -} - -pub fn init_tracing() { - let mut env_filter = - EnvFilter::new("near_lake_framework=info,queryapi_coordinator=info,stats=info"); - - if let Ok(rust_log) = std::env::var("RUST_LOG") { - if !rust_log.is_empty() { - for directive in rust_log.split(',').filter_map(|s| match s.parse() { - Ok(directive) => Some(directive), - Err(err) => { - eprintln!("Ignoring directive `{}`: {}", s, err); - None - } - }) { - env_filter = env_filter.add_directive(directive); - } - } - } - - tracing_subscriber::fmt::Subscriber::builder() - .with_env_filter(env_filter) - .with_writer(std::io::stderr) - .init(); -} - -async fn final_block_height(opts: &Opts) -> u64 { - let client = JsonRpcClient::connect(opts.rpc_url()); - let request = methods::block::RpcBlockRequest { - block_reference: BlockReference::Finality(Finality::Final), - }; - - let latest_block = client.call(request).await.unwrap(); - - latest_block.header.height -} diff --git a/indexer/queryapi_coordinator/src/s3.rs b/indexer/queryapi_coordinator/src/s3.rs deleted file mode 100644 index a288dd6d1..000000000 --- a/indexer/queryapi_coordinator/src/s3.rs +++ /dev/null @@ -1,342 +0,0 @@ -use anyhow::{bail, Context, Result}; -use aws_sdk_s3::Client as S3Client; -use chrono::{DateTime, NaiveDate, Utc}; -use futures::future::try_join_all; - -// Sanity check, if we hit this we have 1M S3 results. -// Currently that would be either 2,700 years of FunctionCall data or 1M contract folders. -// If we hit 1M contracts we should build an index to support efficient wildcard contract matching. -const MAX_S3_LIST_REQUESTS: usize = 1000; -pub const INDEXED_DATA_FILES_BUCKET: &str = "near-delta-lake"; -pub const INDEXED_ACTIONS_FILES_FOLDER: &str = "silver/accounts/action_receipt_actions/metadata"; - -fn storage_path_for_account(account: &str) -> String { - let mut folders = account.split('.').collect::>(); - folders.reverse(); - folders.join("/") -} - -pub async fn find_index_files_by_pattern( - s3_client: &S3Client, - s3_bucket: &str, - s3_folder: &str, - pattern: &str, -) -> Result> { - Ok(match pattern { - x if x.contains(',') => { - let account_array = x.split(','); - let mut results = vec![]; - for account in account_array { - let account = account.trim(); - let sub_results = if account.contains('*') { - list_index_files_by_wildcard(s3_client, s3_bucket, s3_folder, &account).await? - } else { - list_s3_bucket_by_prefix( - s3_client, - s3_bucket, - &format!("{}/{}/", s3_folder, storage_path_for_account(account)), - ) - .await? - }; - results.extend(sub_results); - } - results - } - x if x.contains('*') => { - list_index_files_by_wildcard(s3_client, s3_bucket, s3_folder, &x).await? - } - _ => { - list_s3_bucket_by_prefix( - s3_client, - s3_bucket, - &format!("{}/{}/", s3_folder, storage_path_for_account(pattern),), - ) - .await? - } - }) -} - -async fn list_index_files_by_wildcard( - s3_client: &S3Client, - s3_bucket: &str, - s3_folder: &str, - pattern: &&str, -) -> Result> { - // remove sub-account wildcard from pattern - let pattern = pattern.replace("*.", ""); - let path = storage_path_for_account(&pattern); - - let folders = - list_s3_bucket_by_prefix(s3_client, s3_bucket, &format!("{}/{}/", s3_folder, path)).await?; - // for each matching folder list files - let mut results = vec![]; - for folder in folders { - results.extend(list_s3_bucket_by_prefix(s3_client, s3_bucket, &folder).await?); - } - Ok(results) -} - -async fn list_s3_bucket_by_prefix( - s3_client: &S3Client, - s3_bucket: &str, - s3_prefix: &str, -) -> Result> { - let mut results = vec![]; - let mut continuation_token: Option = None; - - let mut counter = 0; - loop { - let mut configured_client = s3_client - .list_objects_v2() - .bucket(s3_bucket) - .prefix(s3_prefix) - .delimiter("/"); - - if continuation_token.is_some() { - configured_client = configured_client.continuation_token(continuation_token.unwrap()); - } - - let file_list = configured_client.send().await?; - if let Some(common_prefixes) = file_list.common_prefixes { - let keys: Vec = common_prefixes - .into_iter() - .map(|o| o.prefix.unwrap()) - .collect(); - results.extend(keys); - } - if let Some(objects) = file_list.contents { - let keys: Vec = objects.into_iter().map(|o| o.key.unwrap()).collect(); - results.extend(keys); - } - if file_list.next_continuation_token.is_some() { - continuation_token = file_list.next_continuation_token; - counter += 1; - if counter > MAX_S3_LIST_REQUESTS { - bail!("Exceeded internal limit of {MAX_S3_LIST_REQUESTS}") - } - } else { - break; - } - } - Ok(results) -} - -pub async fn fetch_contract_index_files( - s3_client: &S3Client, - s3_bucket: &str, - s3_folder: &str, - start_date: DateTime, - contract_pattern: &str, -) -> Result> { - // list all index files - let file_list = - find_index_files_by_pattern(s3_client, s3_bucket, s3_folder, contract_pattern).await?; - - let fetch_and_parse_tasks = file_list - .into_iter() - .filter(|index_file_listing| file_name_date_after(start_date, index_file_listing)) - .map(|key| { - let s3_client = s3_client.clone(); - async move { - // Fetch the file - fetch_text_file_from_s3(s3_bucket, key, &s3_client).await - } - }) - .collect::>(); - - // Execute all tasks in parallel and wait for completion - let file_contents: Vec = try_join_all(fetch_and_parse_tasks).await?; - Ok(file_contents - .into_iter() - .filter(|file_contents| !file_contents.is_empty()) - .collect::>()) -} - -pub async fn fetch_text_file_from_s3( - s3_bucket: &str, - key: String, - s3_client: &S3Client, -) -> Result { - // todo: can we retry if this fails like the lake s3_fetcher fn does? - // If so, can we differentiate between a file not existing (block height does not exist) and a network error? - let get_object_output = s3_client - .get_object() - .bucket(s3_bucket) - .key(key.clone()) - .send() - .await - .with_context(|| format!("Error fetching index file {key}"))?; - - let bytes = get_object_output - .body - .collect() - .await - .with_context(|| format!("Error reading bytes of index file {key}"))?; - String::from_utf8(bytes.to_vec()).with_context(|| format!("Error parsing index file {key}")) -} - -/// check whether the filename is a date after the start date -/// filename is in format 2022-10-03.json -fn file_name_date_after(start_date: DateTime, file_name: &str) -> bool { - let file_name_date = file_name.split('/').last().unwrap().replace(".json", ""); - let file_name_date = NaiveDate::parse_from_str(&file_name_date, "%Y-%m-%d"); - match file_name_date { - Ok(file_name_date) => file_name_date >= start_date.date_naive(), - Err(e) => { - // if we can't parse the date assume a file this code is not meant to handle - tracing::debug!( - target: crate::INDEXER, - "Error parsing file name date: {:?}", - e - ); - false - } - } -} - -#[cfg(test)] -mod tests { - use crate::s3::{ - fetch_text_file_from_s3, find_index_files_by_pattern, list_s3_bucket_by_prefix, - INDEXED_ACTIONS_FILES_FOLDER, INDEXED_DATA_FILES_BUCKET, - }; - - /// Parses env vars from .env, Run with - /// cargo test s3::tests::list_delta_bucket -- mainnet from-latest; - #[tokio::test] - #[ignore] - async fn list_delta_bucket() { - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let list = list_s3_bucket_by_prefix( - &s3_client, - INDEXED_DATA_FILES_BUCKET, - &format!("{}/", INDEXED_ACTIONS_FILES_FOLDER), - ) - .await - .unwrap(); - assert_eq!(list.len(), 4); - } - - /// cargo test s3::tests::list_with_single_contract -- mainnet from-latest - #[tokio::test] - #[ignore] - async fn list_with_single_contract() { - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let list = find_index_files_by_pattern( - &s3_client, - INDEXED_DATA_FILES_BUCKET, - INDEXED_ACTIONS_FILES_FOLDER, - "hackathon.agency.near", - ) - .await - .unwrap(); - assert_eq!(list.len(), 1); - } - - /// cargo test s3::tests::list_with_csv_contracts -- mainnet from-latest - #[tokio::test] - #[ignore] - async fn list_with_csv_contracts() { - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let list = find_index_files_by_pattern( - &s3_client, - INDEXED_DATA_FILES_BUCKET, - INDEXED_ACTIONS_FILES_FOLDER, - "hackathon.agency.near, hackathon.aurora-silo-dev.near, hackathon.sputnik-dao.near", - ) - .await - .unwrap(); - assert!(list.len() >= 15); // expecting 15 but these contracts could get randomly called sometime - } - - /// cargo test s3::tests::list_with_wildcard_contracts -- mainnet from-latest - #[tokio::test] - #[ignore] - async fn list_with_wildcard_contracts() { - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let list = find_index_files_by_pattern( - &s3_client, - INDEXED_DATA_FILES_BUCKET, - INDEXED_ACTIONS_FILES_FOLDER, - "*.keypom.near", - ) - .await - .unwrap(); - assert!(list.len() >= 550); - } - - /// cargo test s3::tests::list_with_csv_and_wildcard_contracts -- mainnet from-latest - #[tokio::test] - #[ignore] - async fn list_with_csv_and_wildcard_contracts() { - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let list = find_index_files_by_pattern( - &s3_client, - INDEXED_DATA_FILES_BUCKET, - INDEXED_ACTIONS_FILES_FOLDER, - "*.keypom.near, hackathon.agency.near, *.nearcrowd.near", - ) - .await - .unwrap(); - assert!(list.len() > 1370); - } - - #[test] - fn storage_path_for_account_splits_and_reverses_into_folders() { - let account = "buildnear.testnet"; - let expected = "testnet/buildnear"; - let actual = super::storage_path_for_account(account); - assert_eq!(expected, actual); - - let account = "v2.keypom.near"; - let expected = "near/keypom/v2"; - let actual = super::storage_path_for_account(account); - assert_eq!(expected, actual); - - let account = "0.app5.hipodev.near"; - let expected = "near/hipodev/app5/0"; - let actual = super::storage_path_for_account(account); - assert_eq!(expected, actual); - } - - #[tokio::test] - #[ignore] - async fn handle_key_404() { - let mut success = false; - - let aws_config = aws_config::from_env().load().await; - let s3_client = aws_sdk_s3::Client::new(&aws_config); - - let s3_result = fetch_text_file_from_s3( - "near-lake-data-mainnet", - "does_not_exist/block.json".to_string(), - &s3_client, - ) - .await; - - if s3_result.is_err() { - let wrapped_error = s3_result.err().unwrap(); - let error = wrapped_error.root_cause(); - if error - .downcast_ref::() - .is_some() - { - success = true; - } else { - println!("Failed to downcast error: {:?}", error); - } - } - - assert!(success); - } -} diff --git a/indexer/queryapi_coordinator/src/utils.rs b/indexer/queryapi_coordinator/src/utils.rs deleted file mode 100644 index 27830f9a3..000000000 --- a/indexer/queryapi_coordinator/src/utils.rs +++ /dev/null @@ -1,102 +0,0 @@ -use serde_json::Value; - -pub(crate) async fn stats(redis_connection_manager: storage::ConnectionManager) { - let interval_secs = 10; - let mut previous_processed_blocks: u64 = - storage::get::(&redis_connection_manager, "blocks_processed") - .await - .unwrap_or(0); - - loop { - let processed_blocks: u64 = - match storage::get::(&redis_connection_manager, "blocks_processed").await { - Ok(value) => value, - Err(err) => { - tracing::error!( - target: "stats", - "Failed to get `blocks_processed` from Redis. Retry in 10s...\n{:#?}", - err, - ); - tokio::time::sleep(std::time::Duration::from_secs(10)).await; - continue; - } - }; - - let alert_rules_count = 1; // Hardcoding until IndexerFunctions have filters - - let last_indexed_block = - match storage::get_last_indexed_block(&redis_connection_manager).await { - Ok(block_height) => block_height, - Err(err) => { - tracing::warn!( - target: "stats", - "Failed to get last indexed block\n{:#?}", - err, - ); - 0 - } - }; - - let bps = (processed_blocks - previous_processed_blocks) as f64 / interval_secs as f64; - - tracing::info!( - target: "stats", - "#{} | {} bps | {} blocks processed | {} Hardcoded AlertRules", - last_indexed_block, - bps, - processed_blocks, - alert_rules_count, - ); - previous_processed_blocks = processed_blocks; - tokio::time::sleep(std::time::Duration::from_secs(interval_secs)).await; - } -} - -pub(crate) fn serialize_to_camel_case_json_string( - streamer_message: &near_lake_framework::near_indexer_primitives::StreamerMessage, -) -> anyhow::Result { - // Serialize the Message object to a JSON string - let json_str = serde_json::to_string(&streamer_message)?; - - // Deserialize the JSON string to a Value Object - let mut message_value: Value = serde_json::from_str(&json_str)?; - - // Convert keys to Camel Case - to_camel_case_keys(&mut message_value); - - serde_json::to_string(&message_value) -} - -fn to_camel_case_keys(message_value: &mut Value) { - // Only process if subfield contains objects - match message_value { - Value::Object(map) => { - for key in map.keys().cloned().collect::>() { - // Generate Camel Case Key - let new_key = key - .split('_') - .enumerate() - .map(|(i, str)| { - if i > 0 { - return str[..1].to_uppercase() + &str[1..]; - } - str.to_owned() - }) - .collect::>() - .join(""); - - // Recursively process inner fields and update map with new key - if let Some(mut val) = map.remove(&key) { - to_camel_case_keys(&mut val); - map.insert(new_key, val); - } - } - } - Value::Array(vec) => { - for val in vec { - to_camel_case_keys(val); - } - } - _ => {} - } -} diff --git a/indexer/rust-toolchain.toml b/indexer/rust-toolchain.toml deleted file mode 100644 index 292fe499e..000000000 --- a/indexer/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "stable" diff --git a/indexer/storage/Cargo.toml b/indexer/storage/Cargo.toml deleted file mode 100644 index 3b12b690a..000000000 --- a/indexer/storage/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "storage" -version = "0.1.0" -edition = "2021" -authors = ["Near Inc "] - -[dependencies] -anyhow = "1.0.57" -redis = { version = "0.21.5", features = ["tokio-comp", "connection-manager"] } -tracing = "0.1.34" diff --git a/indexer/storage/README.md b/indexer/storage/README.md deleted file mode 100644 index 8b42aba85..000000000 --- a/indexer/storage/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Storage - -This is a helper crate that provides methods to interact with Redis storage. Actually it doesn't simplify things much, so **this crate might be deprecated soon**. - -See [the Docs](../docs) diff --git a/indexer/storage/src/lib.rs b/indexer/storage/src/lib.rs deleted file mode 100644 index 13b7cf72e..000000000 --- a/indexer/storage/src/lib.rs +++ /dev/null @@ -1,226 +0,0 @@ -pub use redis::{ - self, aio::ConnectionManager, ErrorKind, FromRedisValue, RedisError, RedisResult, ToRedisArgs, -}; - -const STORAGE: &str = "storage_alertexer"; - -pub const LAKE_BUCKET_PREFIX: &str = "near-lake-data-"; -pub const STREAMS_SET_KEY: &str = "streams"; -/// Corresponds to the `allowlist` key in Redis. Accounts within this list will be executed on the -/// V2 architecture, hence allow, and will be ignored on the V1 (this) architecture, hence deny. -pub const DENYLIST_KEY: &str = "allowlist"; - -pub async fn get_redis_client(redis_connection_str: &str) -> redis::Client { - redis::Client::open(redis_connection_str).expect("can create redis client") -} - -pub fn generate_block_stream_key(prefix: &str) -> String { - format!("{}:last_published_block", prefix) -} - -pub fn generate_real_time_stream_key(prefix: &str) -> String { - format!("{}:real_time:stream", prefix) -} - -pub fn generate_real_time_streamer_message_key(block_height: u64) -> String { - format!("streamer:message:{}", block_height) -} - -pub fn generate_real_time_storage_key(prefix: &str) -> String { - format!("{}:real_time:stream:storage", prefix) -} - -pub fn generate_historical_stream_key(prefix: &str) -> String { - format!("{}:historical:stream", prefix) -} - -pub fn generate_historical_storage_key(prefix: &str) -> String { - format!("{}:historical:stream:storage", prefix) -} - -pub async fn connect(redis_connection_str: &str) -> anyhow::Result { - Ok(get_redis_client(redis_connection_str) - .await - .get_tokio_connection_manager() - .await?) -} - -pub async fn del( - redis_connection_manager: &ConnectionManager, - key: impl ToRedisArgs + std::fmt::Debug, -) -> anyhow::Result<()> { - redis::cmd("DEL") - .arg(&key) - .query_async(&mut redis_connection_manager.clone()) - .await?; - tracing::debug!(target: STORAGE, "DEL: {:?}", key); - Ok(()) -} - -pub async fn set( - redis_connection_manager: &ConnectionManager, - key: impl ToRedisArgs + std::fmt::Debug, - value: impl ToRedisArgs + std::fmt::Debug, - expiration_seconds: Option, -) -> anyhow::Result<()> { - let mut cmd = redis::cmd("SET"); - cmd.arg(&key).arg(&value); - - // Add expiration arguments if present - if let Some(expiration_seconds) = expiration_seconds { - cmd.arg("EX").arg(expiration_seconds); - } - - cmd.query_async(&mut redis_connection_manager.clone()) - .await?; - tracing::debug!(target: STORAGE, "SET: {:?}: {:?} Ex: {:?}", key, value, expiration_seconds); - Ok(()) -} - -pub async fn get( - redis_connection_manager: &ConnectionManager, - key: impl ToRedisArgs + std::fmt::Debug, -) -> anyhow::Result { - let value: V = redis::cmd("GET") - .arg(&key) - .query_async(&mut redis_connection_manager.clone()) - .await?; - tracing::debug!(target: STORAGE, "GET: {:?}: {:?}", &key, &value,); - Ok(value) -} - -pub async fn sadd( - redis_connection_manager: &ConnectionManager, - key: impl ToRedisArgs + std::fmt::Debug, - value: impl ToRedisArgs + std::fmt::Debug, -) -> anyhow::Result<()> { - tracing::debug!(target: STORAGE, "SADD: {:?}: {:?}", key, value); - - redis::cmd("SADD") - .arg(key) - .arg(value) - .query_async(&mut redis_connection_manager.clone()) - .await?; - - Ok(()) -} - -pub async fn xadd( - redis_connection_manager: &ConnectionManager, - stream_key: impl ToRedisArgs + std::fmt::Debug, - fields: &[(&str, impl ToRedisArgs + std::fmt::Debug)], -) -> anyhow::Result<()> { - tracing::debug!(target: STORAGE, "XADD: {:?}, {:?}", stream_key, fields); - - let mut cmd = redis::cmd("XADD"); - cmd.arg(stream_key).arg("*"); - - for (field, value) in fields { - cmd.arg(*field).arg(value); - } - - cmd.query_async(&mut redis_connection_manager.clone()) - .await?; - - Ok(()) -} - -/// Sets the key `receipt_id: &str` with value `transaction_hash: &str` to the Redis storage. -/// Increments the counter `receipts_{transaction_hash}` by one. -/// The counter holds how many Receipts related to the Transaction are in watching list -pub async fn push_receipt_to_watching_list( - redis_connection_manager: &ConnectionManager, - receipt_id: &str, - cache_value: &[u8], -) -> anyhow::Result<()> { - set(redis_connection_manager, receipt_id, cache_value, None).await?; - // redis::cmd("INCR") - // .arg(format!("receipts_{}", transaction_hash)) - // .query_async(&mut redis_connection_manager.clone()) - // .await?; - Ok(()) -} - -/// Removes key `receipt_id: &str` from Redis storage. -/// If the key exists in the storage decreases the `receipts_{transaction_hash}` counter. -// pub async fn remove_receipt_from_watching_list( -// redis_connection_manager: &ConnectionManager, -// receipt_id: &str, -// ) -> anyhow::Result> { -// match get::>(redis_connection_manager, receipt_id).await { -// Ok(maybe_transaction_hash) => { -// if let Some(ref transaction_hash) = maybe_transaction_hash { -// redis::cmd("DECR") -// .arg(format!("receipts_{}", transaction_hash)) -// .query_async(&mut redis_connection_manager.clone()) -// .await?; -// tracing::debug!(target: STORAGE, "DECR: receipts_{}", transaction_hash); -// del(redis_connection_manager, receipt_id).await?; -// } -// Ok(maybe_transaction_hash) -// } -// Err(e) => { -// anyhow::bail!(e) -// } -// } -// } - -/// Returns the value of the `receipts_{transaction_hash}` counter -pub async fn receipts_transaction_hash_count( - redis_connection_manager: &ConnectionManager, - transaction_hash: &str, -) -> anyhow::Result { - get::( - redis_connection_manager, - format!("receipts_{}", transaction_hash), - ) - .await -} - -pub async fn update_last_indexed_block( - redis_connection_manager: &ConnectionManager, - block_height: u64, -) -> anyhow::Result<()> { - set( - redis_connection_manager, - "last_indexed_block", - block_height, - None, - ) - .await?; - redis::cmd("INCR") - .arg("blocks_processed") - .query_async(&mut redis_connection_manager.clone()) - .await?; - Ok(()) -} - -pub async fn get_last_indexed_block( - redis_connection_manager: &ConnectionManager, -) -> anyhow::Result { - Ok(redis::cmd("GET") - .arg("last_indexed_block") - .query_async(&mut redis_connection_manager.clone()) - .await?) -} - -// `redis::transaction`s currently don't work with async connections, so we have to create a _new_ -// blocking connection to atmoically update a value. -pub fn atomic_update(redis_url: &str, key: K, update_fn: F) -> anyhow::Result<()> -where - K: ToRedisArgs + Copy + 'static, - O: FromRedisValue + 'static, - N: ToRedisArgs + 'static, - F: Fn(O) -> RedisResult + 'static, -{ - let mut conn = redis::Client::open(redis_url)?.get_connection()?; - - redis::transaction(&mut conn, &[key], |conn, pipe| { - let old_value = redis::cmd("GET").arg(key).query(conn)?; - let new_value = update_fn(old_value)?; - - pipe.cmd("SET").arg(key).arg(new_value).query(conn) - })?; - - Ok(()) -} From b9cf4fa6ec959e422cd06fed398a347534dd6b20 Mon Sep 17 00:00:00 2001 From: Morgan Mccauley Date: Mon, 26 Feb 2024 09:18:02 +1300 Subject: [PATCH 2/3] chore: Remove coordinator v1 from docker compose --- docker-compose.yml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 7dc2e5181..88cd1bdba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,24 +19,6 @@ services: ports: - "8002:8002" - coordinator-v1: - build: - context: ./indexer - args: - - CARGO_BUILD_MODE=debug - depends_on: - - redis - environment: - REDIS_CONNECTION_STRING: redis://redis - LAKE_AWS_ACCESS_KEY: - LAKE_AWS_SECRET_ACCESS_KEY: - PORT: 9180 - REGISTRY_CONTRACT_ID: dev-queryapi.dataplatform.near - AWS_QUEUE_REGION: eu-central-1 - command: - - mainnet - - from-interruption - coordinator: build: context: . From 9600ae4e75365a3ed9dcecf3331722e6a5ba3cdb Mon Sep 17 00:00:00 2001 From: Morgan Mccauley Date: Mon, 26 Feb 2024 09:23:11 +1300 Subject: [PATCH 3/3] chore: Update readme --- README.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 6092f692b..e918977f4 100644 --- a/README.md +++ b/README.md @@ -6,22 +6,20 @@ With QueryApi you can * Retrieve that data through a GraphQL API. ## 🧩 Components -1. [QueryApi Coordinator](./indexer) -An Indexer that tracks changes to the QueryApi registry contract. It triggers the execution of those IndexerFunctions -when they match new blocks by placing messages on a Redis Stream. Spawns historical processing threads when needed. - 1.a. Subfolders provide crates for the different components of the Indexer: indexer_rule_type (shared with registry contract), -indexer_rules_engine, storage. -2. [Indexer Runner](.indexer-js-queue-handler) - Retrieves messages from the SQS queue, fetches the matching block and executes the IndexerFunction. -3. [Runner](.runner) +1. [Coordinator](./coordinator) + Continuously reads latest registry and attempts to synchronise that configuration across the system, i.e. starting relevant Block Streams and Executors. +1. [Runner](./runner) + Manages "Executors" which, retrieves messages from Redis Streams, fetches matching blocks, and executes Indexer code against that block. Retrieves messages from Redis Stream, fetching matching block and executes the IndexerFunction. -3. [IndexerFunction Editor UI](./frontend) +1. [Block Streamer](./block-streamer) + Manages "Block Streams" which, use the configured contract filter to fetch relevant blocks from S3 and publish those blocks to Redis Streams. +1. [IndexerFunction Editor UI](./frontend) Serves the editor UI within the dashboard widget and mediates some communication with the GraphQL DB and block server. -4. [Hasura Authentication Service](./hasura-authentication-service) +1. [Hasura Authentication Service](./hasura-authentication-service) Provides authentication for the Hasura GraphQL server. -5. [IndexerFunction Registry Contract](./registry) +1. [IndexerFunction Registry Contract](./registry) Stores IndexerFunctions, their schemas and execution parameters like start block height. -6. [Lake Block server](./block-server) +1. [Lake Block server](./block-server) Serves blocks from the S3 lake for in browser testing of IndexerFunctions. ## 🚀 Getting Started